2012-06-08 8 views

答えて

14

every?はtrueまたはfalseを返します。疑問符が付いてきます。 someはブール値を返さず、「最初に論理値が返された真の値」を返し、それ以外の場合はnilを返します。コレクション内の最初の要素が述語に渡さ

user=> (some #(if (= 0 %) 1 0) [1 3 5 0 9]) 
0 

、述語が論理的に真である、0に評価されるので、someリターンはあなたが見ることができます0:

は、ここで私が思い付いたラメ例ですsomeは真または偽を戻していません。

したがってevery?は、trueまたはfalseを返すため、疑問符が付けられます。 someは、predまたはnilによって返される値を返します。したがって、疑問符は表示されません。

+0

おかげ。私はもう1つを試して、それを明確にします。 '(some#{2 3 4 5} [2 3 4 5 6])'はo/p '2'を与える。私は、 '何人か 'がブール値を返すことを期待していました。 Arrgh。とにかく感謝します。 – nishnet2002

+0

@nestle:これは良い例です –

+0

さらに、ブール関数を使ってブール値を返す場合は、ブール関数でラップできます。(ブール値(いくつかの#{2 3 4 5} [2 3 4 5 6] ))=> true –

0

いくつかは必ずしもブール値を返すわけではありませんが、いつもそうです。 documentation.

は、collの中の任意のxに対して 他にnilを(predはx)の最初の論理真の値を返します参照してください。一つの一般的なイディオムはpredをとしてセットを使用することで、例えば ため、これは戻ります:フレッド場合:フレッドは、そうでなければゼロシーケンスである: (一部#{:フレッド}コル)

関連する問題