为什么每个?函数在Clojure中用空向量返回true?

时间:2016-12-31 00:20:07

标签: clojure functional-programming lisp clojurescript

我遇到了这种奇怪的行为:

{{1}}

列表就是这样...

我应该返回 false 而不是 true

这种功能设计的原因是什么?

1 个答案:

答案 0 :(得分: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))