【发布时间】:2019-03-21 16:57:49
【问题描述】:
我觉得我和Basic Lisp Macro error 在同一个球场 但是当我想象代码在展开时应该是什么样子时,我没有看到问题,并且宏扩展没有帮助,因为它只是不想输出任何我可以打印的东西; macroexpand 只是为我运行代码。
(setf my-array (make-array 4 :initial-element 3))
(print my-array)
(setf (aref my-array 2) 5)
(print my-array)
(defmacro set3To5 (arrnum)
(print (arrayp arrnum))
(print arrnum)
(setf (aref arrnum 3) 5)
)
(set3To5 my-array)
运行它会给我输出
argument MY-ARRAY is not an array
但是如果 'arrnum' 被 'my-array' 替换了应该没问题吧?
引用链接的问题
现在在宏展开时,调用宏 ADD-TEST,参数 VAR 得到值 G,一个符号。
当然 my-array 是一个符号,它是我想要操作的符号,为什么会有问题?
【问题讨论】:
-
"macroexpand 没有帮助,因为它只是不想输出任何东西" - 那是因为您的宏不返回任何代码。它只是试图打印一些东西。
-
@melpomene 不应该返回 defmacro 的“body”参数中的代码吗?
-
不,宏的主体是在调用宏时运行的普通代码,就像函数一样。
-
@melpomene 这确实可以解释为什么它不起作用。谢谢!你帮我弄清楚了。我们的老师指给我们 tutorialspoint.com 和 gigamonkeys 的书,哦,他们确实展示过一次,我错过了。
标签: common-lisp gnu-common-lisp