2012-04-04 91 views

回答

8

(quote <anything>)從字面上評估爲<anything>。符號'<anything>意味着(quote <anything>),不管<anything>是什麼,它只是簡單地返回而不被評估。

此外,nil評估自己。

當引用文字時,其他對象也評估自己:某些符號和所有非符號原子都是這樣。

'22有什麼區別?他們都評估爲2

另外,'"abc"和​​之間,以及:foo':foo之間的區別是什麼?

區別在於'2的形式是(quote 2),而2只是2。他們評估的是同樣的事情,但不是一回事。

評估Lisp意味着數據被視爲表達式的源代碼。兩個表達式可以具有相同的值,但可以由不同的數據組成。例如4(+ 2 2)(* 2 2)

說,4(+ 2 2)有什麼區別?

如果4(+ 2 2)都產生4,爲什麼'4產生4,但'(+ 2 2)產生(+ 2 2)?引用的意思是「給我這段程序代碼作爲數據,而不是它表示的值」。

1

沒有區別,只要你認爲評價的唯一結果,即

nil 

'nil 

評價爲相同的值(即nil)。然而,有,真正的區別,就讀者而言,由於

nil ===> nil 

'nil ===> (quote nil) 

,這是特別有趣的,如果你有嵌套形式像

((nil) 'nil) 

其中讀數爲

((nil) (quote nil)) 
6

當您評估NIL時,您會得到variable named NIL的值,當您評估'NIL時,會得到名爲NIL的符號。但是,這兩件事是由規範定義爲同一個對象。見the Hyperspec on nil

ñ。該對象一次是COMMON-LISP包中名爲"NIL"的符號,空列表,表示false的布爾值(或廣義布爾值)以及空類型的名稱。

您可以檢查自己:

(eq NIL 'NIL) ==> T 

然而,等價停在那裏。 ''NIL評估到列表(quote NIL)

相關問題