末尾再帰が必要な関数に突入したら
1.末尾再帰フラグをON
2.現在の環境を変数に保持。
3.評価を停止。スタックを上る
4.評価の最後にたどり着いたら末尾再帰フラグを確認
5.末尾再帰フラグがONだったら フラグを倒して
6.保持した環境を使用して評価されたものを再評価
1〜6を末尾評価フラグがONにならなくなるまで繰り返すことで
スタックオーバフローは起きなくなりました。
何でもかんでも最適化すると結果がおかしくなります。
でも、いつ末尾再帰なのかってことを
判定する必要があるようです。。。><;
これはどうやろうかな