メッセージ。 - 本質的に集合の操作はループで書くな、再帰で書け

# 本質的に集合の操作はループで書くな、再帰で書け

http://nnri.dip.jp/~yf/momoka.cgi?op=readmsg&address=104
 「本質的にループである繰り返しは、再帰で書くな、ループで書け」

という命題にチャレンジ中(頭が勝手に)。本質的にループってなんだ? ループの定義がよく分からないことに気づく。ループ、ループ、……繰り返しか。では「繰り返し」とは何か。同じことを何度もやるってことだろうな。そういう意味では繰り返しはループ構文で記述するほうが意味論に対して素直だろうと想像できる。うん。(つまり「同じこと」を何回もやるならばってことだ。)

一方ループを再帰で書くことにもメリットがあるように思う。というのも、やはり処理の対象を集合と考えた場合に、再帰のほうが意味論に素直だからだ。たとえば数の集合から奇数を取り出すケースを考えてみる。Lisp系の表現をするならば、'(1 2 3 4 5) という「数の集合」を入力として受け取ると、出力は'(1 3 5) となる。これをループで書く意味がほとんどないことは、Lispなりを多少でも触ったことのある人には説明するまでもないだろう。
さらにここで重要なのは、この関数が「数の集合」を入力(引数)として受け取り、「数の集合」を出力として返すことだ。入力も出力も数の集合となることで、再帰的な投入やモジュラリティの向上が可能になる。再帰的な投入は「組み合わせを挺子のように使う」という強力な恩恵をもたらす。一方高いモジュラリティは、問題の抽象化と問題の分割統治という2つの効果に帰結される。

ループ表現というのは、あまりに手続き的だ。手続き的な処理をさせたいのならループでよいと思う。だけど、処理対象が集合的に表現できるなら、むしろそれは積極的に再帰で実現すべきなんじゃないだろうか。
2005-02-14 20:00:04 / ふじさわ / Comment: 0 / Trackback: 0

Comment

コメント投稿機能は無効化されています。

Trackback

TrackBack投稿機能は無効化されています。