LoginSignup
21
6

More than 5 years have passed since last update.

プログラミングにおけるアキュムレータとは何か?

Posted at

プログラミングElixirを読んでいて、問題中に「アキュムレータ」という単語が出てきて意味がわからなかったので調べました。

その問題

以下がその問題です。

先ほど定義したsum関数では、その時々の合計を第二引数として引き回すようにした。これで、値を作るために、どのようにアキュムレータを使うか、分かりやすく見せることができた。ちなみに、sum関数は、アキュームレータを使わずに書くこともできる。できるかな?やってみよう。

先ほど定義したsum関数というのは、以下の関数です。

MyList.exs
defmodule MyList do
  def sum([], total), do: total
  def sum([ head | tail ], total), do: sum(tail, head+total)
end

アキュムレータとは何か?

アキュムレータは「状態を保持するために追加された引数」のことを言うそうです。今回はtotalに値を入れています。

1..10 |> Enum.to_list |> MyList.sum(0) # 55

totalの値は0から始まって、順番に1、2、3...を足していっています。何をやっているかは分かるのですが、なんとなくtotalはいらないような気がします。

アキュムレータを使わないで実装する

実際、sum関数はアキュムレータなしで実装できます。

MyList.exs
defmodule MyList do
  def sum([]), do: 0
  def sum([ head | tail ]), do: head + sum(tail)
end
1..10 |> Enum.to_list |> MyList.sum # 55

すっきりしましたね!アキュムレータは便利そうですが、実装時には本当にいるかどうかよく考える必要がありそうです。

21
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
6