and
是一个宏。
所以我对它的实现方式感兴趣并使用slime的slime-macroexpand-all-inplace
扩展(and 1 2 nil 4 5)
,这会产生:
(IF 1
(IF 2
(IF NIL
(IF 4
(THE T 5)
NIL)
NIL)
NIL)
NIL)
我不明白的是,and
一旦遇到nil
值就会停止评估。但此处and
正在超越...(IF NIL...
我是否将宏观扩张与评估混为一谈?
我还尝试跟踪(and 1 2 nil 4 5)
与C-c C-t
的评估,但是粘液(或sbcl)抱怨:can't use encapsulation to trace anonymous function #<FUNCTION (MACRO-FUNCTIONAND) {2264360D}>