Die Seite "Advanced Scheme: Some Naughty Bits" lautet:
Fortsetzungen sind ein mächtiges Kontrollflusskonstrukt, aus dem sich nahezu jede andere Kontrollflussstruktur ableiten lässt.
Ich dachte, dass Schemas call/cc
, die mit dem J-Operator von Peter Landin verwandt sind (*), verwendet werden könnten, um eine bekannte Kontrollflussstruktur zu implementieren ?
Bei "Kontrollflussstruktur" denke ich speziell an die Beschreibung von Wikipedia , z. B. Ausnahmen, Koroutinen, grüne Fäden und so weiter.
Gibt es Beispiele für Kontrollflussstrukturen, die nicht mithilfe von implementiert werden können call/cc
?
(*) Ich konnte kein Papier ausgraben, das call/cc
so leistungsfähig ist wie der J-Operator. Eine Arbeit von Felleisen (die ich nicht gelesen habe und zugegebenermaßen Probleme damit habe, sie vollständig zu verstehen) untersucht dies und scheint zu dem Schluss zu kommen, dass sie formal gleichwertig sind, obwohl sie verschiedenen Komplexitätsklassen angehören.
(Beachten Sie auch, dass ich die Frage basierend auf den Kommentaren unten aktualisiert habe.)
Aktualisieren
Basierend auf der hervorragenden Antwort von @Neel unten habe ich mir Websites angesehen, die begrenzte und nicht begrenzte Fortsetzungen kommentieren , und es scheint in der Tat, dass es zwar call/cc
nicht ausreichend ist, nicht begrenzt zu sein. In der Zwischenzeit können erstklassige, begrenzte Fortsetzungen (wie shift/reset
) verwendet werden, um eine beliebige Kontrollflussstruktur auszudrücken.
call/cc
in Abwesenheit eines Staates keine Ausnahmen ausdrücken können . (Wie Thielecke weiter ausführt, können Ausnahmen implementiert werden, indem zwei Fortsetzungen call/cc
amb
-Operator und so weiter.