FUZZ> (defvar *foo* nil)
*FOO*
FUZZ> (defmacro bar ()
(format t "foo: ~A" *foo*)
`(+ 1 1))
BAR
FUZZ> (defmacro bot ()
(let ((*foo* 17))
`(bar)))
BOT
FUZZ> (bot)
foo: NIL
我的宏观扩展心智模型(显然是错误的)说以下是按顺序发生的:
运行bot
( 绑定*foo*
到17
) 的宏扩展,运行 的宏扩展,打印(being )bar
的当前值,并返回不是宏的表单,宏扩展时间现在结束,最后评估表单,并返回*foo*
17
(+ 1 1)
(+ 1 1)
2
。
为什么我错了?
有没有一种简单的方法来做我想做的事?