環境と継続
現在のsacallopでは、関数適用を次のような(うさん臭い)方法・手順で評価している。
- 先頭要素のlambda式の評価でクロージャを生成する時、不完全な環境フレーム(名前だけで、値がまだ対応付けられていない)を作って、クロージャに保持させる*1。
- 引数を全部評価
- 引数にクロージャを適用する時、次の情報から完全な環境フレームを作り、環境(名前検索の際に有効なスコープ)に組み込む。
- 先ほどの不完全な環境フレーム(名前)
- 実引数(値)
- 拡大された環境のもとで、クロージャの本体を評価する
- クロージャの評価が終わったら、さっき追加された環境フレームを直ちスコープから外す*2。
おぼろげながら、環境と継続は密接に関係していそうな気がする。というか、それ以前に継続の概念がまだ理解できてないから困る。継続のつかみ所の無さは異常。
プログラミングにおいて継続(けいぞく、continuation、コンティニュエーション)とは、ある計算過程のある瞬間における、その過程の未来全体(デフォルト)を表すもの、あるいは計算過程の実行スナップショットと説明される。
継続 - Wikipedia