我试图在LISP中使用两种形式的宏,它会评估两种形式,但总是返回表单2的结果.下面是我正在使用的代码 -
(defmacro testmac (x body) (prog2 x body))
Run Code Online (Sandbox Code Playgroud)
使用以下表单执行宏时,它正常工作并始终返回5,这是第二种形式.
(testmac (- 10 6) (/ 10 2))
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下表单执行宏时,它返回错误.
(testmac (print a) (print b))
Run Code Online (Sandbox Code Playgroud)
以下是我得到的错误 -
debugger invoked on a UNBOUND-VARIABLE: The variable B is unbound.
Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL.
restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.
(SB-INT:SIMPLE-EVAL-IN-LEXENV B #<NULL-LEXENV>)
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误,如何使用宏来实现此功能?
PS我不能使用defun需要使用宏来执行(testmac(print a)(print b))