小编Mik*_*dor的帖子

在LISP中使用defmacro时出现未绑定的变量错误

我试图在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))

lisp clisp common-lisp

2
推荐指数
1
解决办法
203
查看次数

标签 统计

clisp ×1

common-lisp ×1

lisp ×1