首页 > 解决方案 > 如何在语法树 (CL) 中表示准引号

问题描述

我了解引号是如何用语言表示的:

(equal ''(1 2) (list 'quote (list 1 2))) ;; => T

但是准引号呢?是这样的吗:

(equal ``(1 2) (list '<???> (list 1 2)))

两者都quasiquotebackquote而不是<???>不工作。

标签: lispcommon-lispmetaprogrammingquasiquotes

解决方案


Common Lisp 中没有标准的表示。指定了反引号应该做什么,但没有等效于quote. 特别是规范在2.4.6中说,在给出了反引号应该如何表现的规范之后:

实现可以自由地将反引号形式 F1 解释为任何形式 F2,当计算时,将产生与上述定义所暗示的结果相同的结果,前提是替代形式 F2 的副作用行为也与上面给出的描述一致。

请注意,这实际上不是问题,因为反引号是您可以自己实现的东西,同时quote需要在语言的基础上。


推荐阅读