New Science Discovery: Perl Idiots Remain Idiots After A Decade!New Science Discovery: Perl Idiots Remain Idiots After A Decade!
Xah Lee
xahlee at gmail.com
Wed Feb 29 09:09:16 CET 2012
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
More information about the Python-list
mailing list