22 Apr 2002 chalst   » (Master)

zhaoway: No, macro's ability to control environments is nothing to do with currying. The point I was making about let is simply that there is no way one could define let as a normal function, ie. (define (let binders body) ...).

Let me try to make the point another way. If I have a function call (f arg), arg is evaluated in the current environment. If I have a macro call (m arg), the macro can create arbitrary computational contexts for arg: it may refer to variables that do not occur in the current computational context, its evaluation may be delayed until varius I/O operations are performed, or various updates to global variables are performed, or some other such thing. Not only that, we can do sophisticated transformations on arg, eg. we might perform a CPS transformation on the arguments through a structural recursion on the given code fragments (Jeffrey Mark Siskind's Screamer code, integrating a constraint-solving language into Common LISP, is based on this technique).

Latest blog entries     Older blog entries

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!