2012-06-08 45 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)的第一個邏輯真值, 否則爲零。一個常見的成語是使用一組作爲預解碼,例如 這將返回:如果弗雷德:弗雷德是序列中,否則爲零: (一些#{:弗雷德}科爾)

相關問題