Quantcast
Channel: 一言多いプログラマーの独り言
Viewing all articles
Browse latest Browse all 846

Elixirで、再帰(Recursion)

$
0
0
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]

Viewing all articles
Browse latest Browse all 846

Latest Images

Trending Articles