今日はフィボナッチ数列。20 項目までを出力する。
defmodule Fibonacci do def fib(n) do fib_iter(0, 1, n, 1) end defp fib_iter(a, b, n, i) do if i > n do [] else [a | fib_iter(b, a + b, n, i + 1)] end end end IO.inspect Fibonacci.fib(20)
^o^ > elixir fib.exs [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]
上のスクリプトは次のようにも書ける。
defmodule Fibonacci do def fib(n), do: fib_iter(0, 1, n, 1) defp fib_iter(_, _, n, i) when i > n, do: [] defp fib_iter(a, b, n, i), do: [a | fib_iter(b, a + b, n, i + 1)] end IO.inspect Fibonacci.fib(20)
関数の本体が十分に短ければこっちのほうが見やすいかも。
当然同じ結果になる。
^o^ > elixir fib2.exs [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181]