3

On Lisp(第 84 页)中,格雷厄姆说

‘(a b c)(不带逗号)等于’(a b c)

然后说

反引号列表等效于对带有引用元素的列表的调用。
也就是说,‘(a b c)(不带逗号)等于(list ’a ’b ’c)

一个陈述必须是错误的,因为'(a b c)并且(list 'a 'b 'c)似乎不相等。后者是一个新的 consed 列表(可以安全地修改),而前者是一个常量——或者至少规范允许编译器这样对待它。

所以也许这是一个非常挑剔的问题,但是反引号列表(不带逗号)‘(a b c)是否等于'(a b c)或等于(list 'a 'b 'c)

4

1 回答 1

6

相等等价不一样。

当然(equal '(a b c) (list 'a 'b 'c))return t,但是,正如您正确指出的那样,'(a b c)它是一个引用的常量,而(list 'a 'b 'c)新分配的。

于 2017-06-02T18:39:51.853 回答