【发布时间】:2017-06-09 12:46:47
【问题描述】:
考虑以下代码sn-p:
[1]> (defvar *clist* '((2 1 21) ( 3 2 32) (4 3 43)))
*CLIST*
[2]> (eval `(case '1 ,@(mapcar #'rest *clist*)))
21
[3]> (defmacro tester (index clist)
`(case ,index ,@(mapcar #'rest clist)))
TESTER
[4]> (tester '1 *clist*)
*** - MAPCAR: A proper list must not end with *CLIST*
The following restarts are available:
ABORT :R1 Abort main loop
Break 1 [5]>
代码包含生成的错误消息。
可以清楚地看到,eval 用作正文的代码
宏 tester ,给出结果。但是相同的代码(通过替换
*clist* 和 '1,clist 和 index 变量。)在用作宏的主体时不起作用。
【问题讨论】:
-
请复制并粘贴确切的代码和消息。众所周知,
comma is illegal outside of backquote,所以你的问题是在骗我们。 -
我错误地删除了反引号。现在的问题是他们。 @sds
-
谢谢。我为你修复了格式。现在请重新编写最后两段。不是以英语为母语的人,我无法理解您的意思。请注意,没有
emacs-REPL这样的东西。 -
请删除所有提及 Emacs。 Emacs Lisp 没有在这里进行评估,也没有发出错误信号。错误来自 SBCL,请在常规 REPL 中自行查看。
-
*clist*是一个symbol,它的值是一个list。你没有评估它。
标签: macros lisp common-lisp