2015-05-26 70 views
7

CL和Scheme都定義了(and)返回t(或#t),沒有參數。無參數(和)返回t

我試圖理解這個理由。我天真的假設是,一個空集是假的,而傳遞零個參數感覺就像傳遞了任何可能是真的東西。

編輯:clojure遵循相同的約定。我必須錯過一些基本的Lisp假設。

回答

17

空的產品是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 
+6

同樣,一個空的**或**應該是錯誤的。一般來說,如果將二元運算符推廣爲n元,那麼使0元項返回運算符的標識元素很有用。 –

+11

這個術語是「身份」。零是加法身份,一個是乘法身份。對於邏輯而言,身份是真實的,並且對於邏輯或者,身份是錯誤的。 –

+0

[空產品](http://en.wikipedia.org/wiki/Empty_product)維基百科文章 – ez121sl

7

這裏有一個更直觀的答案:一個「和」就像一個清單:你是「完成」(即真)當所有的列表上的東西都是真實的。假設有人給你一個空清單;在這種情況下,你沒有什麼可以檢查的,而且你做得很細緻。

4

以下是我試圖儘可能簡單的說明:如果且僅有至少一個參數爲false,則and表達式爲false,否則爲真。所以,如果沒有任何參數,它是微不足道的。