我试图在理解之后返回一个合计的金额。这是我正在尝试的:
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: Enum.reduce(n, 0, fn(x, y) -> (x + y) end)这似乎应该对从理解返回的列表求和,但实际上它输出了以下错误:
#=> ** (Protocol.UndefinedError) protocol Enumerable not implemented for 3有人能帮上忙吗?
发布于 2017-06-23 12:13:30
您传递的是每个要缩减的整数,而不是过滤后的列表。您应该将for的结果传递给Enum.reduce/3
iex(1)> range = 1..999
1..999
iex(2)> multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end
#Function<6.118419387/1 in :erl_eval.expr/5>
iex(3)> for(n <- range, multiple_of_3_or_5?.(n), do: n) |> Enum.reduce(0, fn(x, y) -> (x + y) end)
233168您还可以使用Enum.sum/1来缩短此时间段:
iex(4)> Enum.sum for n <- range, multiple_of_3_or_5?.(n), do: n
233168https://stackoverflow.com/questions/44712655
复制相似问题