Piszę simulator of the SECD machine w języku C# z przewodnikiem description on Wikipedia. Mam podstawowe operacje zakończone, ale nie jestem pewien, jak wdrożyć instrukcję rap
.W maszynie SECD, jak działa "rap"?
Na Wikipedia mówi o rap
:
rap działa jak AP, tylko, że zastępuje wystąpienie manekina środowiska z obecnym, a tym samym rekurencyjnych funkcji możliwe
a dla ap
mówi:
ap powoduje zamknięcie i listę wartości parametrów ze stosu. Zamknięcie jest stosowane do parametrów, instalując środowisko jako bieżące, przesuwając listę parametrów przed tą, usuwając stos i ustawiając C na wskaźnik funkcji zamknięcia. Poprzednie wartości S, E i następna wartość C są zapisywane na zrzucie.
Oto moja realizacja 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;
}
Zauważ, że List
moja implementacja Lisp stylu "przeciw" komórki.
Co mnie dezorientuje, to czym różni się rap
od ap
? Na przykład, co dokładnie dzieje się z rejestrem środowiska (E)? Uważam, że definicja Wikipedii jest nieco niejednoznaczna i nie udało się znaleźć niczego innego, co by ją dobrze tłumaczyło.