Oh look, another language (ceylon)

Steven D'Aprano steve at pearwood.info
Tue Nov 19 02:00:21 EST 2013


On Mon, 18 Nov 2013 19:33:01 -0800, Rick Johnson wrote:

> I've never *really* been crazy about the plus operator concatenating
> strings anyhow, however, the semantics of "+" seem to navigate the
> "perilous waters of intuition" far better than "*".
> 
>     Addition of numeric types is well defined in maths: Take N inputs
>     values and *reduce* them into a single value that represents the
>     mathematical summation of all inputs.

Which sum would that be?

Addition of vectors, matrices, quaternions, tensors, something else?

Do you perhaps mean the Whitney Sum?
http://mathworld.wolfram.com/WhitneySum.html

Ah, no, you're talking about addition of Real numbered values, where 
nothing can *possibly* go wrong:

    py> 0.1 + 0.1 + 0.1  == 0.3
    False

Hmmm. Oh well, at least we know that adding 1 to a number is guaranteed 
to make it bigger:

    py> 1e16 + 1 > 1e16 
    False

Surely though, the order you do the addition doesn't matter:

    py> 1.5 + (1.3 + 1.9) == (1.5 + 1.3) + 1.9
    False


Dammit maths, why do you hate us so???


So, explain to me again, what is the *precise* connection between the 
mathematical definition of addition, as we learn about in school, and 
what computers do?


>     HOWEVER,
>     
>     Addition of strings (concatenation) requires interpreting the
>     statement as a more simplistic "joining" process of : take N inputs
>     and join them together in a *linear fashion* until they become a
>     single value.


Ah, you mean like addition in base-1, otherwise known as the unary number 
system, also known as a tally.

So if you want to add (decimal) 3 and 5 using base-1, we would write:

    ||| + |||||

and concatenating the tallies together gives:

    ||||||||


which if I'm not mistaken makes 8 in decimal.


> There is an inconsistency when applying the "*" operator between
> numerics and strings. In the case of numerics the rules are widely
> understood and quite logical, HOWEVER, in the case of "string products",
> not only are rules missing, any attempt to create a rule is illogical,
> AND, we've broken the consistency of the "*" interface!

A foolish consistency is the hobgoblin of little minds.

Just because you can't define a sensible meaning for str * str doesn't 
mean you can't define a sensible meaning for str * int.


>     py> "a" * "4"
>     'aaaa'
>     
> Okay, that makes sense, but what about:
> 
>     py> "a" * "aaaa"
> 
> That will haunt your nightmares!

You're easily terrified if you have nightmares about that. I can't 
imagine what you would do if faced with the M-combinator applied to 
itself.



> But even the previous example, whilst quite logical, is violating the
> "contract of transformations" 

What contract of transformations?



-- 
Steven



More information about the Python-list mailing list