2017-06-02 72 views
2

在Lisp中(第84)。格雷厄姆說「在Lisp的」:`(ABC)VS '(ABC)對(列表' A 'B' C)

‘(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

由反引用產生的列表被允許與模板本身共享結構,所以變異是不安全的。它的實際工作是由實施決定的。 – jkiiski

回答

5

等於等效是不一樣的。

當然(equal '(a b c) (list 'a 'b 'c))回報t,但是,正如你注意到自己,'(a b c)是帶引號的不變,而(list 'a 'b 'c)是新分配。

+2

嗯,好的,所以格雷厄姆說他們在關係運算符「相等」方面都是平等的,我認爲這與等價性相混淆。 – Frank

相關問題