Steven D'Aprano <[EMAIL PROTECTED]> writes: > Nevertheless, in Python 1+2 always equals 3. You can't say the same thing > about Lisp.
Well, I can't say much of *anything* about "1 + 2" in Lisp, since that's not the syntax for adding numbers in Lisp. In Lisp, numbers are typically added using the "+" function, which might be invoked like so: (+ 1 2 3) This would return 6. It's true that some dialects of Lisp will let you redefine the "+" function, which would typically be a bad idea. Other dialects would give you an error or a warning if you tried to redefine "+". I would fall more into the latter camp. (Though sometimes you might want a way to escape such restrictions with some sort of "yes, I really want to shoot myself in the head" declaration, as you may want to experiment, not with changing the meaning of "(+ 1 2"), but rather with adding some additional useful capability to the "+" function that it doesn't already have. Back on the Python front, although "1 + 2" might always equal 3 in Python, this is really rather cold comfort, since no useful code would ever do that. Useful code might include "a + 1", but since you can overload operators in Python, you can say little about what "a + 1" might do or mean on the basis of the syntax alone. Furthermore, in Python you can redefine the "int" data type so that int.__add__ does a subtraction instead. Then you end up with such weirdness as >>> int(1.0) + int(2.0) -1 Also, you can redefine the sum() function in Python. So, we see that Python offers you a multitude of ways to shoot yourself in the head. One of the things that annoys me when coding in Python (and this is a flaw that even lowly Perl has a good solution for), is that if you do something like longVarableName = foo(longVariableName) You end up with a bug that can be very hard to track down. So one use for macros would be so that I can define "let" and "set" statements so that I might code like this: let longVariableName = 0 set longVarableName = foo(longVariableName) Then if longVarableName didn't already exist, an error would be raised, rather than a new variable being automatically created for me. The last time I mentioned this, Alex Martelli basically accused me of being an idiot for having such trivial concerns. But, ya know -- it isn't really a trivial concern, despite Martelli's obviously high intellect. A woman I work with who is bringing up a CMS using Drupal was complaining to me bitterly that this very same issue in PHP was causing her bugs that were hard to track down. Unfortunately, I could not gloat over her with my Python superiority, because if Drupal were written in Python, rather than PHP, she'd have the very same problem -- at least in this regard. |>oug -- http://mail.python.org/mailman/listinfo/python-list