末尾呼出し

日記に書くのは半年ぶりですが,じつは地味にHaskellScheme風言語のインタプリタ実装を続けていたりします。まあ,途中何度も中断してたりしますが。。。
R?RS準拠のものを作る気(というか能力)なんてないのだが,やはり末尾再帰くらいはちゃんとやりたいと思って,最近はそれについて考えている。
どこが末尾式かは静的にわかることなんで,構文解析と評価の間に末尾式をマークするような工程をいれて,評価時にそのマークの有無で処理をかえるようにすればよさそう。
しかし,今回は,関数呼出しが末尾呼出しかどうかを評価時にチェックする方法も試すことにした。明らかにパフォーマンス的にマイナスだが,いろいろやってみるのも勉強になるだろう。まあ,もともとパファーマンスなんて考えていないし。。。
つづく(たぶん)