有一個'?'的根本區別是什麼?在every?
而不是在some
clojure的功能?爲什麼「每一個?」具有 '?' 「某些」沒有「?」在Clojure中?
user> (every? true? [true true false])
false
user> (some true? [true false false])
true
謝謝。
有一個'?'的根本區別是什麼?在every?
而不是在some
clojure的功能?爲什麼「每一個?」具有 '?' 「某些」沒有「?」在Clojure中?
user> (every? true? [true true false])
false
user> (some true? [true false false])
true
謝謝。
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
或零返回的值,所以它不會得到問號。
有些不一定會返回一個布爾值,而每一個?總是這樣。見documentation.
在科爾任意x返回(預解碼X)的第一個邏輯真值, 否則爲零。一個常見的成語是使用一組作爲預解碼,例如 這將返回:如果弗雷德:弗雷德是序列中,否則爲零: (一些#{:弗雷德}科爾)
感謝。我又試了一次,說清楚了。 '(some#{2 3 4 5} [2 3 4 5 6])'給出o/p'2'。我預計'some'會返回布爾值。 Arrgh。無論如何,謝謝。 – nishnet2002
@nestle:這是一個更好的例子 –
此外,如果你確實想要返回一個布爾值,你可以把它包裝在布爾函數中:(boolean(some#{2 3 4 5}} [2 3 4 5 6] ))=> true –