2016-08-17 11 views
1

、私はリストを操作する場合は、3の倍数を取得:なぜ、エリキシル剤のフィルター機能で、またはステートメントを使用できないのですか?万能薬で

1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0) end) 

出力:[3, 6, 9]


私がまたはステートメントを追加かのように:

1..10 |> Enum.filter(fn(x) -> (rem(x,3) == 0 || rem(x,5)) end) 

を出力:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


または(括弧で括られた)ステートメントが意図しない出力をするのはなぜですか?

答えて

6

​​3210は結果として整数を返します。すべての整数は0を含むエリクシールで真実です。つまり、rem(x, 5)は常に真実であり、フィルタ関数は常に真となり、すべてのアイテムを保持します。あなたはおそらく使用するつもりです:

iex(1)> 1..10 |> Enum.filter(fn(x) -> rem(x,3) == 0 || rem(x,5) == 0 end) 
[3, 5, 6, 9, 10] 
+0

どのような脳退色!乾杯! – Rich

関連する問題