9

有一个“?”的根本区别是什么?在every?和不在someclojure的功能中?

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

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

谢谢。

4

2 回答 2

14

every?返回真或假,所以它得到一个问号。some不返回布尔值,它返回“pred 返回的第一个逻辑真值”,nil否则返回。

这是我想出的蹩脚的例子:

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

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

所以every?得到一个问号,因为它返回真或假。 some返回由pred或 nil 返回的值,因此它没有问号。

于 2012-06-08T17:41:22.777 回答
0

some 不一定返回布尔值,而 every? 总是这样。请参阅文档。

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

于 2012-06-08T17:47:40.653 回答