如何在 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)))