4

コンマコンマアットがどのように機能するかについて混乱しています。

comma-comma-at の使用例はIs there a use for double unquote (double comma) when defined a Lisp macro? にあります。

それは私には思われる

(let ((parms '(x y)))
  ``(beg ,,@parms end))

またはそれに相当するものに展開されます

`(beg ,x ,y end)

そこまで展開してどうするの?

二重バッククォート形式を評価すると、2 番目のコンマが機能し、結果は次のようになると考えていました。

`(beg ,<splice stuff here> end)

そして、Lisp インタプリタは、Lisp が遭遇したときの意味で、「カンマの前に何かをつなぎ合わせることが何を意味するのかわかりません」と不平を言うべきであるように見えます。

`,@abc

「逆引用符の前に何かをつなぎ合わせることが何を意味するのかわかりません。二度とそんなことをしないでください」と言う可能性があります。

しかし、どういうわけか、通訳者は文句を言わず、単に行うことを選択します

`(beg <splice stuff here and write comma in front of each of them> end)

それはCLHS backquoteのルールと互換性がありますか?


読者向けの情報として、回答に続くコメントは古いバージョンの回答を参照しており、回答の更新につながります。新しい読者はコメントを読む必要はありません。


CHLS の「最も内側の逆引用符で囲まれた形式を最初に展開する必要がある」という意味も参照してください。

4

1 に答える 1