有一个“?”的根本区别是什么?在every?
和不在some
clojure的功能中?
user> (every? true? [true true false])
false
user> (some true? [true false false])
true
谢谢。
有一个“?”的根本区别是什么?在every?
和不在some
clojure的功能中?
user> (every? true? [true true false])
false
user> (some true? [true false false])
true
谢谢。
every?
返回真或假,所以它得到一个问号。some
不返回布尔值,它返回“pred 返回的第一个逻辑真值”,nil
否则返回。
这是我想出的蹩脚的例子:
user=> (some #(if (= 0 %) 1 0) [1 3 5 0 9])
0
集合中的第一个元素被传递到谓词中,谓词的计算结果为 0,这在逻辑上为真,因此some
返回 0。您可以看到some
没有返回真或假。
所以every?
得到一个问号,因为它返回真或假。
some
返回由pred
或 nil 返回的值,因此它没有问号。
some 不一定返回布尔值,而 every? 总是这样。请参阅文档。
返回 coll 中任何 x 的 (pred x) 的第一个逻辑真值,否则返回 nil。一个常见的习惯用法是将集合用作 pred,例如,如果 :fred 在序列中,这将返回 :fred,否则返回 nil: (some #{:fred} coll)