Trong Lisp thông thường (SBCL 1.0.58) tại sao macro HOẶC sử dụng gensym, nhưng không phải AND?Trong Lisp thường gặp tại sao macro HOẶC sử dụng một gensym, nhưng không phải AND?
Ví dụ,
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>
Tôi nhìn defboot.lisp nơi các macro được định nghĩa nhưng thấy không có gì có liên quan trong các ý kiến.
Có, tôi thấy điều đó ngay bây giờ. Cảm ơn bạn. – kes