CPSでevalを書き直して、
continuationを処理するところを追加するのがいいと思う。
Tail recusionだから、CPSなら当然非再帰に実行される。
コードでは再帰を使っていても。
非再帰にこだわってスタックを使い廻すのはscheme的でない。
演習としては面白いと思うけれど。

カンニングしたければ、
Essentials of Programming Languages
71. Continuation Passing Interpreterで。