[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Issue: LET-TOP-LEVEL (version 1)

Jeff says:
``Just for a complete set of references: DEFMACRO is specified to define the
expansion function in the global (i.e. null lexical) environment on page 145.''

Right, but I thought that this was generally recognized to be an error, a
misunderstanding.  There is no reason to restrict DEFMACRO in this way.

Dan says:
``I may have gotten confused here, my thinking was that since MACROLET ignores
lexical bindings that DEFMACRO should too.  I don't feel strongly about this

MACROLET could also use lexical bindings, but it would lead to difficulties for
the compiler.  That is, any use of the macro would have to be expanded each time
the form is evaluated.  Thus, the uses would have to be interpreted, not
compiled.  I don't recommend this to anyone, but it could be done, I suppose.
The real difference between DEFMACRO and MACROLET is that the expansion
functions produced  by the former have indefinite extent, while those produced
by the latter have only dynamic extent, if that.  It thus makes sense that they
might have different environment behavior.