如何在LISP中定义具有N个参数的宏?

如何在LISP中定义具有N个参数的宏?,lisp,common-lisp,Lisp,Common Lisp,我试图在LISP中定义一个宏,比如在另一个文件中定义这个调用函数 (set_name name My name is Timmy) (set_name occupation I am a doctor ) (defmacro set_name (list) (print list) ) 与普通函数一样,使用&rest将所有剩余参数收集到一个列表中 (defmacro set_name (name &rest list) `(setq ,name ',list)) (se

我试图在LISP中定义一个宏,比如在另一个文件中定义这个调用函数

(set_name name My name is Timmy)

(set_name occupation I am a doctor )

(defmacro set_name (list)
   (print list)
)

与普通函数一样,使用&rest将所有剩余参数收集到一个列表中

(defmacro set_name (name &rest list) 
  `(setq ,name ',list))
(set_name occupation I am a doctor)
(print occupation)
这将打印我是一名医生


您需要在扩展中引用、列出,这样它就不会尝试将所有符号作为变量进行求值。

宏应该返回新代码来代替宏调用执行,而不是立即执行。您能给我举个例子吗?对不起,我是LISP新手,我只是不知道如何将这些参数传递到define macro。为什么您认为这首先应该是一个宏,而不是一个函数?名称表明它应该设置变量,而不是打印一些东西。你到底想做什么?我建议你阅读第7章和第8章来了解CL的宏谢谢!!