プログラミング言語のインタプリタを実装するとき、構文木にあわせて再帰で書くほうが基本的に楽だ。しかし、多くの実装で再帰呼び出しは回数に制限があったり処理が遅かったりする。そこで、再帰呼び出し型のevalをループで記述する動機ができる。ただ、いきなりループで書こうとすると、インタプリタコードがわけわからなくなるし、バグも入りやすい。 そこでループを作る戦略として、 再帰呼び出しで実装 再帰呼び出しのContinuation Passing Style(CPS)化 CPS形式は末尾呼び出し形式でもある Continuationのde-functionalize、つまりContinuationの関数表現をデータオブジェクトであらわす クロージャを明示的なデータオブジェクトにする 末尾呼び出し関数のループ化 こうすれば、ループ形式インタプリタも素直に対応付けができる。クロージャも使わないので、Ja