前回の記事の補足。
下記のsumに関して言うと、実は抜け穴があって、n をマイナスにすると無限ループに陥る。
Elixir
sum.exs
defmodule Sum do
def sum(0), do: 0
def sum(n), do: n + sum(n - 1)
end
n = -5
IO.puts(Sum.sum(n))
# => ....
そこで、ガード節でパラメータの制限をする。
sum.exs
defmodule Sum do
def sum(0), do: 0
def sum(n) when n > 0 do
n + sum(n - 1)
end
end
n = -5
IO.puts(Sum.sum(n))
#=> ** (FunctionClauseError) no function clause matching in Sum.sum/1
sum.exs:2: Sum.sum(-5)
sum.exs:9: (file)
(elixir) lib/code.ex:370: Code.require_file/2
このエラーに対するハンドリングは必要なのだと思うが、別件として後日調べてみる。たぶんElixir的には、落ちたら落としてしまえという考え方なのであろうか?