我尝试在 Elixir 中做以下可以在 Python 中实现的事情:
sum = 0
for elem in list:
if elem >= 5:
sum += 1
3
例如:我想返回给定列表的数字[0, 5, 8, 3, 10]
这就是我在 Elixir 中所做的(这还不起作用):
cond do
Enum.empty?(list) -> 0
length(list) == 1 -> if List.first(list) >= 5 do 1 else 0 end
true ->
Enum.reduce(list, 0, fn x, acc -> if x >= 5 do acc + 1 end end)
end
end
我收到以下错误:** (ArithmeticError) bad argument in arithmetic expression: nil + 1
编辑:
找到了!问题是当 x < 5 时我没有返回任何值,导致没有值传递给acc
因此acc
is nil
。下面的代码有效:
cond do
Enum.empty?(list) -> 0
length(list) == 1 -> if List.first(list) >= 5 do 1 else 0 end
true ->
Enum.reduce(list, 0, fn x, acc -> if x >= 5 do acc + 1 else acc + 0 end end)
end
end
在reduce函数中,你忘记告诉当数字为5或更少时要做什么:
甚至更简单
Enum.count/2
: