Lisp 类语言在语法树(CL)中的表示方式

Lisp 类语言在语法树(CL)中的表示方式,lisp,common-lisp,metaprogramming,quasiquotes,Lisp,Common Lisp,Metaprogramming,Quasiquotes,我理解引号在语言中的表示方式: (equal ''(1 2) (list 'quote (list 1 2))) ;; => T 但准引号呢?是不是有点像: (equal ``(1 2) (list '<???> (list 1 2))) QUISQUOTE和backquote而不是NOT都不起作用。公共Lisp中没有标准表示法。指定了backquote应该做什么,但没有与quote等效的内容。特别是规范在给出反向报价行为规范后指出: 如果替代形式F2的副作用行为也与上述描

我理解引号在语言中的表示方式:

(equal ''(1 2) (list 'quote (list 1 2))) ;; => T
但准引号呢?是不是有点像:

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

QUISQUOTE和backquote而不是NOT都不起作用。

公共Lisp中没有标准表示法。指定了backquote应该做什么,但没有与quote等效的内容。特别是规范在给出反向报价行为规范后指出:

如果替代形式F2的副作用行为也与上述描述一致,则实现可以自由地将后引形式F1解释为任何形式F2,该形式F2在评估时将产生与上述定义所暗示的结果相同或相等的结果


请注意,这实际上不是一个问题,因为反引号是您可以自己实现的东西,而quote需要是语言的核心。

Common Lisp中没有标准表示法。指定了backquote应该做什么,但没有与quote等效的内容。特别是规范在给出反向报价行为规范后指出:

如果替代形式F2的副作用行为也与上述描述一致,则实现可以自由地将后引形式F1解释为任何形式F2,该形式F2在评估时将产生与上述定义所暗示的结果相同或相等的结果


请注意,这实际上不是一个问题,因为反引号是您可以自己实现的东西,而quote需要在语言的内部实现。

通常不需要表示:

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

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

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

实现可以扩展为特殊的构造,这样反引号表达式也可以作为反引号表达式打印。

通常不需要表示:

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

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

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

实现可能会扩展为特殊的构造,这样反引号表达式也可以作为反引号表达式打印。

也许您会在“是否尝试过引号”中找到答案?它在CLISP中有效。也许你会在你试过的报价中找到答案?它在CLISP中起作用。该文本在后引形式中误用了单词形式。表单是要求值的对象。没有对象是反引用的;这是阅读语法,或者是术语表中给出的第2种意义上的表达式。@Kaz:我认为“后引形式”的意思是它前面描述的“由”[…]我的省略号表示的形式”,正如你所说的是第2种意义上的表达式。但是,好吧,这就是我们写的。那篇文章在后引形式中误用了单词形式。表单是要求值的对象。没有对象是反引用的;这是阅读语法,或者是术语表中给出的第2种意义上的表达式。@Kaz:我认为“后引形式”的意思是它前面描述的“由”[…]我的省略号表示的形式”,正如你所说的是第2种意义上的表达式。但是,好吧,这就是我写的。