我对 comma-comma-at 的作用感到困惑。
使用 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)
它如何扩展到那个?
我在想,如果我评估双反引号形式,它会导致第二个逗号完成它的工作,结果是:
`(beg ,<splice stuff here> end)
并且看起来 Lisp 解释器应该抱怨并说“我不知道在逗号前拼接东西意味着什么”,因为当 Lisp 遇到
`,@abc
它可能会说“我不知道在反引号之前拼接东西意味着什么。不要再这样做了。”
但不知何故,口译员没有抱怨,只是选择做
`(beg <splice stuff here and write comma in front of each of them> end)
这与CLHS 反引号中的规则兼容吗?
供读者参考,答案后面的评论指的是旧版本的答案,并导致答案的更新。新读者无需阅读评论。