拥有'?'的根本区别是什么?在every?
而不是在some
的clojure函数中?
user> (every? true? [true true false])
false
user> (some true? [true false false])
true
感谢。
答案 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)