我正在尝试通过Common Lisp:符号计算的简单介绍一书来学习 Common Lisp 。此外,我正在使用 SBCL、Emacs 和 Slime。
在第 14 章,最后一章,作者介绍了宏。出现以下问题:
编写一个名为的宏
VARIABLE-CHAIN
,它接受任意数量的输入。表达式(VARIABLE-CHAIN A B C D)
应扩展为设置为A
、’B
和B
的’C
表达式。C
’D
答案纸是:
从pdf复制并粘贴到这里:
(defmacro variable-chain (&rest vars)
‘(progn
,@(do ((v vars (rest v))
(res nil))
((null (rest v)) (reverse res))
(push ‘(setf ,(first v) ’,(second v))
res))))
在 Emacs 中,我使用这个hack来删除智能引号。将它粘贴到 Emacs 中,我得到:
(defmacro variable-chain (&rest vars)
'(progn
,@(do ((v vars (rest v))
(res nil))
((null (rest v)) (reverse res))
(push '(setf ,(first v)
',(second v))
res))))
不幸的是,我无法将它编译为 Slime 的 REPL,它会引发错误:
> READ error during COMPILE-FILE: Comma not inside a backquote.
我尝试更改'(progn
为:
`(progn
但它也没有工作:"comma not inside a backquote"
。
我做错什么了吗?或者,答题卡不正确?
谢谢。