2016年11月9日水曜日

Elixirで、再帰(Recursion)

Elixirで、再帰(Recursion)です。特にリストの[head | tail]でループさせているのは特徴的で、慣れないと、難しいですね。
Elixirでは、Forループすることはできず、そのかわり関数型言語は再帰に頼ります。関数は再帰的に呼び出され,停止の条件になるまで,動作し続けます.
defmodule Recursion do
  def print_multiple_times(msg, n) when n <= 1 do
    IO.puts msg
  end

  def print_multiple_times(msg, n) do
    IO.puts msg
    print_multiple_times(msg, n - 1)
  end
end
defmodule Math do
  def sum_list([head | tail], accumulator) do
    sum_list(tail, head + accumulator)
  end

  def sum_list([], accumulator) do
    accumulator
  end

  def double_each([head|tail]) do
    [head * 2| double_each(tail)]
  end

  def double_each([]) do
    []
  end

  def exponential_each([head|tail]) do
    [head * head| exponential_each(tail)]
  end

  def exponential_each([]) do
    []
  end
end
iex(1)> Recursion.print_multiple_times("Hello!", 3)
Hello!
Hello!
Hello!
:ok

iex(2)> Math.sum_list([1, 2, 3, 4, 5, 6, 7, 8, 9], 0)
45

iex(3)> Math.sum_list([1, 2, 3, 4, 5, 6, 7, 8, 9], 1000)
1045

iex(4)>  Math.double_each([1, 2, 3, 4, 5, 6, 7, 8, 9])
[2, 4, 6, 8, 10, 12, 14, 16, 18]

iex(5)> Math.exponential_each([1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]

0 件のコメント:

コメントを投稿