1

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

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

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

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

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

4

2 回答 2

3

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

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

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

于 2020-03-13T13:58:06.160 回答
2

通常不需要代表:

 '`(1 2) -> '(1 2)

 '`(,1 2) -> '(1 2)

 '`(,a 2) -> (list* a '(2))

实现可以扩展为特殊结构,因此反引号表达式也可以打印为反引号表达式。

于 2020-03-13T14:41:38.070 回答