如何在 LISP 的函数中调用宏?
How to call a macro in a function in LISP?
假设我得到了以下宏:
(defmacro my-check (number)
`(> 3 ,(apply #'+ number)))
如何在函数中调用这个宏?
我试过,例如,下面的函数:
(defun do-test (my-object)
(my-check my-object)))
但是我在编译时出现了以下错误:
during macroexpansion of (MY-CHECK MY-OBJECT). Use *BREAK-ON-SIGNALS* to
intercept.
The value MY-OBJECT is not of type LIST.
您的宏中的逗号位置错误。它试图在宏扩展期间评估整个 (apply ...)
,这当然会失败,因为 number
是一个符号而不是列表。请记住,宏是在编译期间扩展的,而不是在 运行 时。
正确的版本是:
(defmacro my-check (number)
`(> 3 (apply #'+ ,number)))
假设我得到了以下宏:
(defmacro my-check (number)
`(> 3 ,(apply #'+ number)))
如何在函数中调用这个宏?
我试过,例如,下面的函数:
(defun do-test (my-object)
(my-check my-object)))
但是我在编译时出现了以下错误:
during macroexpansion of (MY-CHECK MY-OBJECT). Use *BREAK-ON-SIGNALS* to
intercept.
The value MY-OBJECT is not of type LIST.
您的宏中的逗号位置错误。它试图在宏扩展期间评估整个 (apply ...)
,这当然会失败,因为 number
是一个符号而不是列表。请记住,宏是在编译期间扩展的,而不是在 运行 时。
正确的版本是:
(defmacro my-check (number)
`(> 3 (apply #'+ ,number)))