如何在LISP中调用函数中的宏?

时间:2016-02-29 13:40:01

标签: common-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.

1 个答案:

答案 0 :(得分:3)

宏中的逗号位于错误的位置。它试图在宏展开期间评估整个(apply ...),这当然是失败的,因为number是符号而不是列表。请记住,宏在编译期间是扩展的,而不是在运行时。

正确的版本是:

(defmacro my-check (number)
  `(> 3  (apply #'+ ,number)))
相关问题