为什么“每个人?”具有 '?'而“某些”没有'?'在Clojure?

时间:2012-06-08 17:26:45

标签: clojure

拥有'?'的根本区别是什么?在every?而不是在some的clojure函数中?

user> (every? true? [true true false])
false

user> (some true? [true false false])
true

感谢。

2 个答案:

答案 0 :(得分:14)

every?返回true或false,因此会出现问号。 some不返回布尔值,它返回“pred返回的第一个逻辑真值”,否则返回nil

这是我提出的蹩脚例子:

user=> (some #(if (= 0 %) 1 0)  [1 3 5 0 9])
0 

集合中的第一个元素被传递到谓词中,谓词的计算结果为0,这在逻辑上是真的,因此some返回0.你可以看到some没有返回true或false。 / p>

所以every?得到一个问号,因为它返回true或false。 some返回pred或nil返回的值,因此不会出现问号。

答案 1 :(得分:0)

有些不一定返回布尔值,而每个?总是这样。请参阅documentation.

  

返回coll中任何x的第一个逻辑真值(pred x),   别的没有。例如,一种常见的习惯是使用集合作为pred   这将返回:fred if:fred在序列中,否则为nil:   (一些#{:fred} coll)