我正在编写一个似乎应该可以正常工作的函数。但我想我错过了一些核心的灵丹妙药。这是我正在尝试做的事情:
defmodule ProjectEuler do
def solve(limit) do
multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end
for(n <- limit, multiple_of_3_or_5?.(n), do: n) |> Enum.reduce(0, fn(x, y) -> (x + y) end)
end
def print do
IO.puts solve(1000)
end
end
这是Project Euler的第一个问题。我不明白为什么这不会返回有效数字?相反,我得到了这个错误
** (Protocol.UndefinedError) protocol Enumerable not implemented for 1000
我在这里做错了什么?
答案 0 :(得分:3)
答案 1 :(得分:2)
在研究了Elixir之后,我想出了第一个Project Euler问题的这个版本。
我觉得它更清楚了!
#!/usr/bin/env elixir
defmodule Problem001 do
def solve do
1..999
|> Enum.filter(fn(x) -> rem(x, 3) == 0 || rem(x, 5) == 0 end)
|> Enum.sum()
end
end
IO.puts Problem001.solve
迭代一个范围(1..999),过滤可被3或5整除的数字,然后将它们全部加起来。