2016-12-31 19 views
1

我遇到了這個怪異的行爲:爲什麼每一個?函數在Clojure中的空向量返回true?

(every? true? []) 
=> true 

(every? false? []) 
=> true 

(every? odd? []) 
=> true 

而且不勝枚舉這樣...

它應該返回的,而不是真正的猜測。

設計這個功能的原因是什麼?

+0

可否請指定的數字的在'[]'不在'奇怪?',而不是'false?',而不是'true?'這是'every?'返回'false'所需要的結果嗎? – Sylwester

+1

「非參數參數」是什麼意思?如果不改變問題的含義,這可以改爲「空」嗎? –

+0

@ArthurUlfeldt你是對的!改變了標題。 –

回答

9

大多數語言中具有類似every?not-any?的函數的一般規則是,當給定空數組時,它們返回標識值。這可以確保當您將操作組合到數組的子集上時,可以獲得相同的結果。規則是

(and (every? true? array1) (every? true? array2)) 

應該返回同樣的事情

(every? true? (concat array1 array2)) 

如果every?返回false爲空數組,這將打破等價當兩個數組是空的。

同樣,not-any?爲空數組返回false確保

(not-any? true? (concat array1 array2)) 

相同

(or (not-any? true? array1) (not-any? true? array2)) 
相關問題