2012-06-08 47 views

回答

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。因为它返回true或false,所以every?得到一个问号。 some返回pred或零返回的值,所以它不会得到问号。

+0

感谢。我又试了一次,说清楚了。 '(some#{2 3 4 5} [2 3 4 5 6])'给出o/p'2'。我预计'some'会返回布尔值。 Arrgh。无论如何,谢谢。 – nishnet2002

+0

@nestle:这是一个更好的例子 –

+0

此外,如果你确实想要返回一个布尔值,你可以把它包装在布尔函数中:(boolean(some#{2 3 4 5}} [2 3 4 5 6] ))=> true –

0

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

在科尔任意x返回(预解码X)的第一个逻辑真值, 否则为零。一个常见的成语是使用一组作为预解码,例如 这将返回:如果弗雷德:弗雷德是序列中,否则为零: (一些#{:弗雷德}科尔)

相关问题