ウィキペディアの説明に基づいて、C#でSECDマシンのシミュレーターを作成しています。基本的な操作は完了しましたが、命令の実装方法がわかりません。rap
ウィキペディアでは、次のように述べていrap
ます。
rapはapのように機能しますが、ダミー環境の発生を現在の環境に置き換えるだけで、再帰関数が可能になります。
そしてap
それは言う:
apは、スタックからクロージャとパラメータ値のリストをポップします。クロージャーは、その環境を現在の環境としてインストールし、その前にパラメーターリストをプッシュし、スタックをクリアし、Cをクロージャーの関数ポインターに設定することによってパラメーターに適用されます。S、Eの前の値、およびCの次の値がダンプに保存されます。
これが私の実装ですap
public void ap()
{
Push(S, ref D);
Push(E, ref D);
Push(C, ref D);
List closure = Pop(ref S);
List paramlist = Pop(ref S);
E = closure.Tail;
Push(paramlist, ref E);
C = closure.Head;
S = List.Nil;
}
List
これがLispスタイルの「cons」セルの実装であることに注意してください。
私を混乱させるのは、正確にどのようにrap
違うのap
ですか?たとえば、環境レジスタ(E)は正確にどうなりますか?ウィキペディアの定義が少し曖昧で、それをうまく説明するものを他に見つけることができませんでした。