[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Macros; lexcial scope
> Wait a minute, you are using your own definition of "correct." I would
> say that T's behavior in both cases is incorrect (I designed T macros,
> so I get to say).
Sorry, I meant "correct" as per the discussion, i.e., "correct if macros are
defined by evaluating their bodies in the lexical environment of the
define-macro". I should have provided more of the context.
> You are also wrong about what happens; the behavior
> you describe is true of interpreted code, but not for compiled code. If
> you compile the file first, you'll get "X unbound variable" for the
> first case, and "M unbound variable" in the second.
Just to make sure I understand you, since "X unbound variable" is the desired
behavior for the first case, that means that the macro body isn't evaluated
(at compile-time) in the lexical environment of the define-macro. So the
compile-time environment of the macro isn't the lexical environment of the
define-macro. I realize that one might want this on occasion, but I guess I
don't understand why this shouldn't be so by default for a vanilla definition
in a vanilla file.
In the second case, M is indeed unbound inside the LET, but the macro M gets
defined at top-level: it returns 2 when you type (M), which seems
inconsistent with the "X unbound variable" error in the first case (i.e., it
seems that the lexical environment of the define-macro, the LET, is also its
compile-time environment).
-- Ashwin.