まだ、関数型プログラミングの記述、特に再帰には慣れていない。
でも、再帰&パターンマッチが含まれているので理解するべき。
Ruby
sum.rb
def sum(n)
result = 0
(1..n).each do |n|
result = result + n
end
result
end
n = 5
puts sum(n)
# => 15
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))
# => 15
または、わかりやすく書くと
sum.exs
defmodule Sum do
def sum(0) do
0
end
def sum(n) do
n + sum(n - 1)
end
end
n = 5
IO.puts(Sum.sum(n))
# => 15
話す時に、日本語(Ruby)⇒英語(Elixir)みたいに脳内変換しているうちは、まだまだ未熟。
日本語(Ruby)、英語(Elixir)ともにネイティブで話したいものです。
※追記
ちなみに、Elixir
には標準でリストをsum
する関数はEnum
に存在します。
sum.exs
n = 5
IO.puts(Enum.sum(1..n))
# => 15