2007-12-29

末尾再帰重要

非常に貴重な突っ込みをいただきました。

odz buffer -- [Python][Scheme]tail call

教訓
* 時々は末尾再帰を意識して書こう。(特にこういう頻繁に呼び出す関数では。)
* lengthは遅い。(リストをつらつらたどって毎回計算するのかな?)
* Gaucheは関数の再帰呼び出しでスタックを使い尽くすとヒープに移す。ただしそうなるとちょっと遅くはなるかも。
* Pythonはやはり配列の添字番号をうまく使い、ジェネレーターを活かすと吉。
* Pythonのrange関数は、schemeではsrfi-1のiota

ほんとうにたすかります。ありがとうございます。
でも、このツッコミで示された最速の関数bigram3を読み解けないという悲しい状況。がんばって読もうと思います。

追記-------
bigram3理解できました。
同様の方針でこれまで自分が書いていた他の関数も末尾再帰になるようにしてみたりした。