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]