2

我正在尝试通过Common Lisp:符号计算的简单介绍一书来学习 Common Lisp 。此外,我正在使用 SBCL、Emacs 和 Slime。

在第 14 章,最后一章,作者介绍了宏。出现以下问题:

编写一个名为的宏VARIABLE-CHAIN,它接受任意数量的输入。表达式(VARIABLE-CHAIN A B C D)应扩展为设置为A’BB’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"

我做错什么了吗?或者,答题卡不正确?

谢谢。

4

1 回答 1

1
于 2021-08-20T19:51:04.930 回答