2

Common Lisp という本でCommon Lisp を学ぼうとしています。さらに、SBCL、Emacs、Slime を使用しています。

最後の第 14 章では、著者はマクロについて説明します。次の問題が提示されます。

VARIABLE-CHAIN任意の数の入力を受け入れるというマクロを作成します。式は、 to 、to 、およびtoに(VARIABLE-CHAIN A B C D)設定される式に展開する必要があります。A’BB’CC’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 では、このハックを使用してスマート クォートを削除しました。それを 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 に答える