
155
6
章
再帰
本書は、ただ関数について考えることから、より深い関数型スタイルの理解へ発想
をスムーズに転換するための章です。関数を終了すべき時はいつなのか、そしてその
時になぜそうすることが良いのかを学びます。本章では主に、自分自身を直接、もし
くは他の関数を介して呼び出す再帰関数を紹介します。
6.1
自身を呼ぶ関数
歴史的に、再帰(
recursion
)と関数型プログラミングは関連したものと捉えられ、
学校でもそのように教えられてきました。この章では、これらの関連性を説明しま
す。まず、再帰が関数型プログラミングにとって重要である
3
つの理由をここで述
べておきます。
●
再帰関数をつかったソリューションは、共通の問題のサブセットに単一の抽
象を使用する。
●
再帰は可変の状態を隠蔽することができる。
●
再帰は遅延評価や、無限データ構造の処理を行う手段のひとつである。
例えば、配列を引数としてとり、その長さ(つまり、要素の数)を返す
myLength
という関数を構築しようとする場合、その基本的特性を考えると、次のような説明に
たどり着くかもしれません
†
。
†
「配列の
length
プロパティを使えばよいのでは?」と思うかもしれません。このような実践的な考え方は
素晴らしいシステムを構築するためには役立ちますが、再帰を学ぶためにはあまり役に立ちません。