SBCL 未绑定变量

问题描述 投票:0回答:1

我正在尝试创建一个宏来检查传入的函数定义。我是 lisp 新手,我在检查 defun 是否是列表中的第一个元素时遇到了困难

(defmacro check (fun-param)
    (first fun-param)
)

(format t "~a~%" (check '(defun my-function (x y))))

从此我期望得到“defun”,但我得到 quote is unbound 错误。然后我在

eval
中使用
first
来评估它,但我得到了“defun”未绑定错误。我尝试了很多步骤,例如检查参数是否是带有
(listp fun-param)
的列表。

我想做的是检查第一个元素是否是“defun”,我尝试过

(if (equal (first fun-param) "defun"))
但它也不起作用,所以我想要一些关于正在发生的事情的指导。我调用检查宏的方式就是我被要求调用它的方式,因此不会改变。

lisp common-lisp sbcl
1个回答
0
投票

宏应该返回要执行的新代码。使用反引号返回带有模板的代码。

(defmacro check (fun-param)
  `(first ,fun-param)
)
© www.soinside.com 2019 - 2024. All rights reserved.