CL和Scheme都定義了(and)
返回t
(或#t
),沒有參數。無參數(和)返回t
我試圖理解這個理由。我天真的假設是,一個空集是假的,而傳遞零個參數感覺就像傳遞了任何可能是真的東西。
編輯:clojure遵循相同的約定。我必須錯過一些基本的Lisp假設。
CL和Scheme都定義了(and)
返回t
(或#t
),沒有參數。無參數(和)返回t
我試圖理解這個理由。我天真的假設是,一個空集是假的,而傳遞零個參數感覺就像傳遞了任何可能是真的東西。
編輯:clojure遵循相同的約定。我必須錯過一些基本的Lisp假設。
空的產品是1.原因是1是*
的中性元素。
如果你有2和3乘以無中生有的產品的產品,然後,你將得到2 * 3 * 1 = 6,我們可以寫
(product (product 2 3) (product))
= (product 6 1)
= 6
相同的計算與and
:
(and (and #t #t) (and))
= (and #t ?)
= #t
我們希望空的(and)
給出值?
,不影響結果。 答案是#t
,因爲#t
是一箇中性元素。
(and x #t) = x for all boolean x
這裏有一個更直觀的答案:一個「和」就像一個清單:你是「完成」(即真)當所有的列表上的東西都是真實的。假設有人給你一個空清單;在這種情況下,你沒有什麼可以檢查的,而且你做得很細緻。
以下是我試圖儘可能簡單的說明:如果且僅有至少一個參數爲false,則and
表達式爲false,否則爲真。所以,如果沒有任何參數,它是微不足道的。
同樣,一個空的**或**應該是錯誤的。一般來說,如果將二元運算符推廣爲n元,那麼使0元項返回運算符的標識元素很有用。 –
這個術語是「身份」。零是加法身份,一個是乘法身份。對於邏輯而言,身份是真實的,並且對於邏輯或者,身份是錯誤的。 –
[空產品](http://en.wikipedia.org/wiki/Empty_product)維基百科文章 – ez121sl