2017-06-23 26 views
0

我越來越想總結的清單,我從一個修真取回時,此錯誤:在Enum.reduce沒有功能的語句匹配/ 3

range = 1..999 

multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end 
IO.inspect for n <- range, multiple_of_3_or_5?.(n), 
    do: Enum.reduce n, 0, fn(x) -> x end 

#=> ** (FunctionClauseError) no function clause matching in Enum.reduce/3 

爲什麼會出現這個錯誤?

+0

[(Protocol.UndefinedError)協議可枚舉3未實現](可能的重複https://stackoverflow.com/questions/44712​​655/protocol -undefinederror - 協議 - 枚舉而不是實現爲-3) – bottlenecked

回答

1

第三個參數Enum.reduce中的函數需要有兩個參數,即可枚舉和累加器中的元素。您目前只有一個參數,x

0

第一個和第三個參數是錯誤的。你可以試試這個

range = 1..999 
multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end 
for n <- range, multiple_of_3_or_5?.(n) do n end |> Enum.reduce(0, 
fn(x, acc) -> x + acc end) 

range = 1..999 
multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end 
Enum.reduce_while(range, 0, fn i, acc -> 
    if multiple_of_3_or_5?.(i), do: {:cont, acc + i}, else: {:cont, acc} 
end)