我们假设我得到了以下宏:
(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.
答案 0 :(得分:3)
宏中的逗号位于错误的位置。它试图在宏展开期间评估整个(apply ...)
,这当然是失败的,因为number
是符号而不是列表。请记住,宏在编译期间是扩展的,而不是在运行时。
正确的版本是:
(defmacro my-check (number)
`(> 3 (apply #'+ ,number)))