在 Common Lisp (SBCL 1.0.58) 中,为什么宏 OR 使用 gensym,而不使用 AND?
例如,
CL-USER> (macroexpand '(and 1 2 3 4 5))
(IF 1
(AND 2 3 4 5)
NIL)
T
CL-USER> (macroexpand '(or 1 2 3 4 5))
(LET ((#:G967 1))
(IF #:G967
#:G967
(OR 2 3 4 5)))
T
CL-USER>
我查看了定义宏的 defboot.lisp,但在评论中没有发现任何相关内容。