Common Lisp という本でCommon Lisp を学ぼうとしています。さらに、SBCL、Emacs、Slime を使用しています。
最後の第 14 章では、著者はマクロについて説明します。次の問題が提示されます。
VARIABLE-CHAIN
任意の数の入力を受け入れるというマクロを作成します。式は、 to 、to 、およびtoに(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 では、このハックを使用してスマート クォートを削除しました。それを 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"
.
私は何か間違ったことをしましたか?それとも解答用紙が間違っていますか?
ありがとう。