Im Zusammenhang mit dem Schema und der CPS Konvertierung habe ich ein paar Probleme damit, zu entscheiden, welche administrative redexes (lambdas) genau sind:
Wenn möglich, wäre eine gute Referenz willkommen.
Redex steht für "reducible expression", was ein Ausdruck ist, der kein Wert ist. Daher ist ein Lambda kein Redex, sondern ein Aufruf.
In CPS ist ein administrativer Redex ein Redex, dessen Operator ein Fortsetzungslambda ist. Solche Redexes können sofort reduziert werden, weil Sie wissen, welche Funktion Sie anrufen.
Beispiel: ((lambda (u) ...) foo)
ist ein administrativer Redex, aber (k foo)
ist nicht.
Ich glaube, ich habe meine Antwort gefunden. ( Bearbeiten: Ich habe stattdessen die Antwort von dimvar akzeptiert, sie ist kürzer und korrekter.)
Unter der Annahme, dass das Eingabeprogramm nicht vollständig CPS ist, muss mindestens ein Prozedur-Rückkehrpunkt durch die CPS-Konvertierung in eine Fortsetzung umgewandelt werden. Diese Fortsetzung wird also durch die Konvertierung und notwendig. Weil es notwendig ist, müssten Sie dies immer tun, auch beim manuellen Konvertieren. Daher sind administrative Redexes nur die durch die CPS-Konvertierung eingeführten Lambdas, die nicht wirklich notwendig sind (meine zweite Definition).
Ich habe ein Papier gefunden, das es so erklärt (Hervorhebung von mir) :
Die naive λ-Codierung in CPS, erzeugt jedoch eine ziemlich beeindruckende Inflation von Lambdas, von denen am meisten form administrative redexes das kann sicher reduziert werden. Administrativ Kürzungen ergeben CPS-Bedingungen entsprechend was man schreiben könnte von Hand. Es ist daher ein geworden Herausforderung, so viele zu eliminieren Verwaltungsrede wie möglich, um CPS-Transformationszeit.
Trotzdem sind natürlich Bemerkungen oder Vorschläge willkommen.
Tags und Links scheme continuations language-theory continuation-passing