Environment Stacking(ES)では、WAMと同様に第2ゴール以降で参照される変数と戻 り番地からなる 環境をスタックに積む。 すなわち、n個のゴールを持つクローズCでは、 i ( < n ) 番目のゴール <が完了 すると C に制御が戻り、i + 1 番目のゴール g i + 1 の引数を環境を参照しながら 引数レジスタに設定して、g i + 1 を呼び出す。
たとえばリスト1の例では、第1ゴールを呼び出す前にスタックに図3の
ような環境が生成される。
この環境中のR0
とL2
は第3ゴールでは参照されないので、enviroment
trimingによって第2ゴールの呼び出しの際に除去される。
KL1にはdeep backtrackがないため、
WAMとは異なりこの除去操作を決定的に実行でき、また第2ゴールで初めて出現する
R1
を除去操作の後に割付けることができる。
したがってWAMよりもスタックの伸長を抑制することができる。