(not 'nil)
和
(not nil)
評估爲T
,所以有'nil
和nil
之間有什麼區別?那麼''nil
呢?如果''nil
的計算結果爲'nil
,那麼''nil
的計算結果不應該爲nil
?
(not 'nil)
和
(not nil)
評估爲T
,所以有'nil
和nil
之間有什麼區別?那麼''nil
呢?如果''nil
的計算結果爲'nil
,那麼''nil
的計算結果不應該爲nil
?
(quote <anything>)
從字面上評估爲<anything>
。符號'<anything>
意味着(quote <anything>)
,不管<anything>
是什麼,它只是簡單地返回而不被評估。
此外,nil
評估自己。
當引用文字時,其他對象也評估自己:某些符號和所有非符號原子都是這樣。
'2
和2
有什麼區別?他們都評估爲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)
?引用的意思是「給我這段程序代碼作爲數據,而不是它表示的值」。
沒有區別,只要你認爲評價的唯一結果,即
nil
和
'nil
評價爲相同的值(即nil
)。然而,有,真正的區別,就讀者而言,由於
nil ===> nil
而
'nil ===> (quote nil)
,這是特別有趣的,如果你有嵌套形式像
((nil) 'nil)
其中讀數爲
((nil) (quote nil))
當您評估NIL
時,您會得到variable named NIL的值,當您評估'NIL
時,會得到名爲NIL的符號。但是,這兩件事是由規範定義爲同一個對象。見the Hyperspec on nil:
零ñ。該對象一次是
COMMON-LISP
包中名爲"NIL"
的符號,空列表,表示false的布爾值(或廣義布爾值)以及空類型的名稱。
您可以檢查自己:
(eq NIL 'NIL) ==> T
然而,等價停在那裏。 ''NIL
評估到列表(quote NIL)
。