“论Lisp”:`(a b c)vs'(a b c)vs(list'a'b'c)

时间:2017-06-02 18:12:00

标签: common-lisp on-lisp

On Lisp (p.84)格雷厄姆说

  

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

然后说

  

反引号列表相当于对包含元素的列表的调用   引用。
即,‘(a b c)(不含逗号)等于(list ’a ’b ’c)

由于'(a b c)(list 'a 'b 'c)似乎不相等,因此一个陈述必须是错误的。后者是一个新的列表(可以安全地修改),而前者是一个常量 - 或者至少规范允许编译器将其视为常量。

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

1 个答案:

答案 0 :(得分:6)

等于等效不一样。

当然(equal '(a b c) (list 'a 'b 'c))会返回t,但是,正如您自己正确注意到的那样,'(a b c)是一个引用的常量,而(list 'a 'b 'c)是新分配的。