我对 comma-comma-at 的作用感到困惑。
使用 comma-comma-at 的示例如下定义 Lisp 宏时是否需要使用双引号(双逗号)? https://stackoverflow.com/questions/17938242/is-there-a-use-for-double-unquote-double-comma-when-defining-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 反引号 http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm?
对于读者而言,答案后面的评论引用了旧版本的答案,并导致答案的更新。新读者无需阅读评论。
另请参阅CHLS“最里面的反引号形式应该首先扩展”含义 https://stackoverflow.com/questions/18008099/chls-innermost-backquoted-form-should-be-expanded-first-meaning