プログラムループ

1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 をRubyでプログラムすると次のようになる。

total = 0
for i in 1..10
  total += i
end
puts total

規則性のある処理をループにまとめて処理するのは、手続き型プログラム言語の基本的な手法だ。total に1つずつ増加する数列の項を加算していく。全く同じではないが、計算のパターンが共通している部分 total += i を for ループの中で計算することによって、計算をまとめることができる。

ところで、同じ計算を Haskell でやると次のようになる。

total 1 = 1
total n = n + total (n-1)

total 10 => 55

上のプログラムとは随分と形態が異なるが、これも共通性のある手順をひとつに纏めるという意味では、上のプログラムと同様なのだ。つまり 1 + 2 + 3 + .. + 9 + 10 という一連の計算のどの段階をとっても、

total n = n + total (n-1)

という共通したパターンが見られる。たとえば、1 + 2 + 3 + 4 = (1 + 2 + 3) + 4 なので、total 4 = 4 + total 3 だ。

total += i と total i = i + total (i-1) は同じパターンを違ったやり方で利用しているだけなのだ。考えてみると空気の存在の様になってしまった for ループも、プログラミングの習い始めにはそう分かりやすくもなかった。再帰関数の定義によるプログラムも慣れてくれば for ループ並に意識しなくなるのかもしれない。
[PR]
by tnomura9 | 2011-05-30 11:09 | Haskell | Comments(0)
<< 中央値 川口千里 >>