Sto scrivendo un simulator of the SECD machine in C# guidato da description on Wikipedia. Ho completato le operazioni di base, ma non sono sicuro di come implementare l'istruzione rap
.Nella macchina SECD come funziona "rap"?
su Wikipedia che dice di rap
:
rap funziona come ap, solo che si sostituisce un evento di un ambiente fittizio con quello attuale, rendendo così funzioni ricorsive possibili
E per ap
dice:
aps una chiusura e un elenco di valori di parametro dallo stack. La chiusura viene applicata ai parametri installando il suo ambiente come quello corrente, spingendo l'elenco dei parametri di fronte a quello, cancellando lo stack e impostando C sul puntatore della funzione di chiusura. I precedenti valori di S, E e il successivo valore di C vengono salvati sul dump.
Qui è la mia realizzazione di 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;
}
noti che List
è la mia realizzazione di uno stile di cella Lisp "contro".
Ciò che mi confonde è esattamente come rap
differisce da ap
? Ad esempio cosa succede esattamente al registro ambientale (E)? Trovo la definizione di Wikipedia un po 'ambigua, e non sono stato in grado di trovare nient'altro che lo spieghi bene.