Tento fazer o seguinte no Elixir que pode ser alcançado em Python:
sum = 0
for elem in list:
if elem >= 5:
sum += 1
Por exemplo: quero retornar o número 3
fornecido na lista[0, 5, 8, 3, 10]
Isto é o que fiz no Elixir (ainda não está funcionando):
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
Estou tendo o erro a seguir:** (ArithmeticError) bad argument in arithmetic expression: nil + 1
Editar:
Encontrei! O problema é que não retornei nenhum valor quando x <5, resultado de nenhum valor passado para, acc
portanto , acc
was nil
. Este código abaixo funciona:
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
Na função de redução, você esqueceu de dizer o que fazer quando o número for 5 ou menos:
E ainda mais simples com
Enum.count/2
: