08/06/12 13:55:28
その辺について、ANSI Common Lispで言ってたね。
以下、それを引用しているページから引用。
初めのうちは再帰は理解するのが難しいと思う人が多い。
難しいと思ってしまうのは、主に関数に対して誤ったメタファ(比喩)をあてはめていることによる。
人々は関数をマシンの一種ととらえがちである。
原料がパラメータで届き、ほかの関数に下請けに出して処理し、最後に完成品を組み立てて、返り値として出荷する。
関数に対してこのメタファをもっていると、再帰は不可能ということになる。
マシンがどうやって作業を自分自身に下請けに出すのか?
動作中のマシンにはそんな余裕などないじゃないかと思ってしまうことになる。
関数は進行しつつあるプロセスであると見る方が、メタファとしては適当であろう。
再帰はプロセスの中では自然なものである。日常生活でも再帰的なプロセスをよく見る。
たとえば、ヨーロッパ史における人口変化に関心をもっている歴史家を考えてみよう。
資料を調べるプロセスは以下のようなものだろう。
1. 1 つの資料を手に入れる
2. 人口変化に関する情報を探す
3. その資料がほかの役立ちそうな資料に言及していたら、ほかの資料を調べる
このプロセスは理解しやすいものだが、第 3 ステップにより同じプロセスが何度か適用されることがあるので、
再帰的なプロセスになっている。