Elixir と Ruby のsumの比較

  • 0
    Like
  • 0
    Comment

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

    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