我对传递给宏的参数如何得到评估有疑问,细节如下。在宏体内传递参数的评估
这个宏定义
(defmacro test-macro (xlist)
`(* ,@xlist))
并没有这个全局变量(defvar *test-list* '(1 100 2 200))
。
当*test-list*
传递给这个宏(test-macro *test-list*)
,返回此错误 -
value *TEST-LIST* is not of the expected type LIST.
[Condition of type TYPE-ERROR]
但如果功能被修改为这个,返回
(defmacro test-macro (xlist)
`(,@xlist)) ;; removed the * operator
(test-macro *test-list*)
名单将返回(1 100 2 200)
。
所以我怀疑为什么,@xlist
在第一种情况下没有得到评估,即应用了*
操作符。任何帮助,高度赞赏。
非常感谢。宏观膨胀是超级有用的.. – 5Fists 2013-02-27 15:39:54
@ 5fists有一个热键macroexpand在粘液;这是1,slimv – 2013-02-28 06:56:31