New Science Discovery: Perl Idiots Remain Idiots After A Decade!New Science Discovery: Perl Idiots Remain Idiots After A Decade!
namekuseijin
namekuseijin at gmail.com
Wed Feb 29 18:45:29 CET 2012
On Feb 29, 5:09 am, Xah Lee <xah... at gmail.com> wrote:
> New Science Discovery: Perl Idiots Remain Idiots After A Decade!
>
> A excerpt from the new book 〈Modern Perl〉, just published, chapter 4
> on “Operators”. Quote:
>
> «The associativity of an operator governs whether it evaluates from
> left to right or right to left. Addition is left associative, such
> that 2 + 3 + 4 evaluates 2 + 3 first, then adds 4 to the result.
> Exponentiation is right associative, such that 2 ** 3 ** 4 evaluates 3
> ** 4 first, then raises 2 to the 81st power. »
>
> LOL. Looks like the perl folks haven't changed. Fundamentals of
> serious math got botched so badly.
>
> Let me explain the idiocy.
>
> It says “The associativity of an operator governs whether it evaluates
> from left to right or right to left.”. Ok, so let's say we have 2
> operators: a white triangle △ and a black triangle ▲. Now, by the
> perl's teaching above, let's suppose the white triangle is “right
> associative” and the black triangle is “left associative”. Now, look
> at this:
>
> 3 △ 6 ▲ 5
>
> seems like the white and black triangles are going to draw a pistol
> and fight for the chick 6 there. LOL.
>
> Now, let me tell you what operator precedence is. First of all, let's
> limit ourselfs to discuss operators that are so-called binary
> operators, which, in our context, basically means single symbol
> operator that takes it's left and right side as operands. Now, each
> symbol have a “precedence”, or in other words, the set of operators
> has a order. (one easy way to think of this is that, suppose you have
> n symbols, then you give each a number, from 1 to n, as their order)
> So, when 2 symbols are placed side by side such as 「3 △ 6 ▲ 5」, the
> symbol with higher precedence wins. Another easy way to think of this
> is that each operator has a stickiness level. The higher its level, it
> more sticky it is.
>
> the problem with the perl explanations is that it's one misleading
> confusion ball. It isn't about “left/right associativity”. It isn't
> about “evaluates from left to right or right to left”. Worse, the word
> “associativity” is a math term that describe a property of algebra
> that has nothing to do with operator precedence, yet is easily
> confused with because it is a property about order of evaluation. (for
> example, the addition function is associative, meaning: 「(3+6)+5 =
> 3+(6+5)」.)
>
> compare it with this:
>
> 〈Perl ＆ Python: Complex Numbers〉http://xahlee.org/perl-python/complex_numbers.html
>
> and for a good understanding of functions and operators, see:
>
> 〈What's Function, What's Operator?〉http://xahlee.org/math/function_and_operators.html
associativity of operators mean little in the Lisp world obviously, so
why was this posted here? Sorry, perl, python and emacs folks...
BTW, it's the same in javascript: it is so such that 2 + 3 + "4" is
"54" and "2" + 3 + 4 is "234". Blame weak typing and + overloading,
though it may be a blessing.
More information about the Python-list
mailing list