プログラミング方法論

ようやく関数プログラミングらしい話に。ただ、どうでもいいけど、印刷の資料が300ページ越え。なんでやねん。おもしろかったのは、やはりリカーシブのところ。
前の大学でもSchemeをやったときにフィボナッチ数をこんなに簡単に解ける!というのをやった。MLもほぼ同様の形にとけるのだが、先生曰く

えーこんな書き方をしてはだめです。大きくなると動きません。

えー。なんでなんで?先生がいうには関数呼び出しが大きすぎてスタックが溢れてしまうと。
確かにそうだろうけど、そうだろうけど・・・。
で、どう書くかというと、関数のbodyの一番最後に再帰呼び出し関数がくるようにしなさいと。これをtail recursiveというらしいのだが、これをするとスタックが再利用できるらしい。なるほど、そうかもしれんが、それって本当に高水準言語*1のやることかい?それってまるでCみたいに実行効率を考えるためにコンピュータの内部を理解しなければならないのと同じやん・・・。

*1:もちろん、ここでの意味はコンピュータと人間では人間により近いという意味。優秀とかそういう意味ではない。