まだ、関数型プログラミングの記述、特に再帰には慣れていない。
でも、再帰&パターンマッチが含まれているので理解するべき。

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
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.