【发布时间】:2021-10-22 07:19:18
【问题描述】:
我正在尝试通过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"。
我做错了吗?还是答题卡不对?
谢谢。
【问题讨论】:
-
@Rob 证明张贴的图片在这里是必不可少的。不在这里发布它会使问题变得不清楚。其张贴无法避免,不应受到处罚。 :)
-
@Rob 请重新阅读我的评论。 :) 图像 很重要。图片是这里的(基本部分)问题。 PDF 被正确看到,文本被复制出一些非 ASCII 字符,然后被一些外部不正确地处理。
-
@Rob 我已经在上面扩展了我的评论,但您也可以更仔细地阅读问题和答案,以获得完整和正确的观点。如果它只是由人类重新输入,谁能说他们没有在那里引入其他异常?
-
@Rob 除非问题是与图片有关。
-
@Rob 图片还在问题中吗?是的,因为它是固有的。以及两个文本代码 sn-ps。
标签: macros common-lisp backquote