在 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)
?
答案 0 :(得分:6)
等于和等效不一样。
当然(equal '(a b c) (list 'a 'b 'c))
会返回t
,但是,正如您自己正确注意到的那样,'(a b c)
是一个引用的常量,而(list 'a 'b 'c)
是新分配的。