2011年10月16日日曜日

末尾再帰を学ぶのは重要か? -> 重要


以前のエントリで、
と、ここまで書いてきてなんだけど、ある関数を末尾再帰にするというのは局所的な最適化なので、重要性は低いと思っている。初心者が知る必要はないし、ソフトウェアの開発初期に、部品となる関数一つ一つに対して、「これは末尾再帰にするべきか、末尾再帰になっているか」と考えるのは premature optimization というものだろう。
なのに、どうして多くの関数型言語の本もかなり序盤に末尾再帰の話を持ってくるのか疑問だ。そもそも関数型言語のような高レベル言語を使ってるのに、スタックを消費する・しない、とか考えたくない。と思うのは間違っているのだろうか? まぁ、パズルみたい (しかもたいてい簡単) なので、面白いけどね。 
と書きました。

この質問をHaskell歴の長いとある人に聞いてみたところ、「末尾再帰にしないと、スタックがのび過ぎて動かなくなることがよくある。なので初心者が末尾再帰を学ぶのは重要」とのことでした。

なるほど。速度の問題だけなら無視できるけど、動かなくなるのは困りますね。納得しました。


0 件のコメント:

コメントを投稿