LoginSignup
1
0

More than 5 years have passed since last update.

Elixirのsumについて(ガード節)

Posted at

前回の記事の補足。

下記の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的には、落ちたら落としてしまえという考え方なのであろうか?

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0