Chris Angelico <ros...@gmail.com>: > On Fri, Feb 21, 2014 at 9:26 PM, Marko Rauhamaa <ma...@pacujo.net> wrote: >> With #define. Nowhere near as elegant (flexible, hygienic) as in >> Lisp, but used to create new syntax: > > That can't create new syntax, though. All it can do is create a thing > that looks like a symbol or a function call and plonks a bit of code > in at that point. That's all. It's more akin to creating a function > that's able to work with blocks of unexecuted code.
Exactly! Lisp functions and macros (including special forms) are closely related. The whole scheme (no pun intended) is so attractive because of the S expression "supersyntax." A "while" macro is syntactically no different from a "while" function. A macro is a "function" whose automatic argument evaluation is disabled; the macro "function" gets the ASTs of the arguments as input. A macro can always simulate a function but not the other way round. With the addition of macros, Python would become a (remote) Lisp dialect. Defining macros would become more complicated because of Python's more complex "supersyntax." Marko -- https://mail.python.org/mailman/listinfo/python-list