tl; dr; Der Typ ist die übergreifende Abstraktion über eine Fortsetzung
Eine Fortsetzung ist die Art ihrer Ein- und Ausgänge
Das, was Sie einer nicht prozedurbasierten Fortsetzung am nächsten kommen, ist wahrscheinlich die Fortsetzungsmonade in Haskell, da sie als Typ ausgedrückt wird, für den viele Funktionen verwendet werden können, um mit dem Typ zu interagieren, um ihn zu unterbrechen, fortzusetzen, zurückzuverfolgen usw.
Sie können diesen Verschluss in einer Art, wie die kapseln Cont
Typ in Haskell , wo Sie die Monade Abstraktion als „höhere Ebene Abstraktion“ erhalten, und es gibt andere Formen der Abstraktion über Fortsetzungen erhalten Sie , wenn Sie auf die Fortsetzung als aussehen Art statt Zum Beispiel einfach eine Prozedur
- Sie können zwei Fortsetzungen nehmen und eine Alternative zwischen ihnen machen, wenn der Typ den Gesetzen folgt, ein Monoid zu sein
- Sie können über den Typ abstrahieren, um die Eingabe- oder Ausgabetypen der Fortsetzung zu ändern, wenn Sie den Abschluss in einen Typ einkapseln, der die Gesetze eines Funktors einhält
- Sie können Ihre Fortsetzung beliebig und teilweise anwenden oder mit Funktionen wie Eingabevalidierung oder Eingabekonvertierung versehen, wenn Sie den Abschluss in einen Typ einkapseln, der den Gesetzen eines anwendbaren Funktors folgt
Abschluss vs. Verfahren
Am Ende des Tages haben Sie im Grunde recht; Eine Fortsetzung ist eine "Prozedur", obwohl ich sie eher als Abschluß bezeichnen würde. Oft werden Fortsetzungen am besten als erstklassige Abschlüsse ausgedrückt, die eine gebundene Umgebung umschlossen haben. In einer reinen funktionalen Sprache könnte man sagen, dass dies nicht besonders sinnvoll ist, weil Sie keine Referenzen haben. Dies ist wahr, aber Sie können Werte einschließen, und durch eine einzelne Zuweisung wird das Einschließen des Werts gegenüber der Referenz genau gleich. Daraus ergibt sich in Haskell:
(\x -> \y -> insideYIcanAccess x (and y))
In einer Sprache, die nicht in der Lage ist, eine verbindliche Umgebung einzuschließen, fehlen möglicherweise technisch gesehen erstklassige Abschlüsse, aber selbst dann gibt es eine Umgebung (im Allgemeinen die globale), die für den Abschluss verfügbar ist.
Daher würde ich sagen, dass es genauer ist, eine Fortsetzung wie folgt zu beschreiben: Ein Verschluss, der auf eine bestimmte Art und Weise verwendet wird.
Fazit
Auf die Frage "Ist eine Fortsetzung anders als durch eine Prozedur umsetzbar?" Nein. Wenn Sie keine First-Class-Funktionen haben, können Sie wirklich keine Fortsetzungen als solche haben (Ja, Funktionszeiger zählen als First-Class-Funktionen, sodass alternativ ein beliebiger Speicherzugriff ausreichen kann).
Nun zur Frage "Gibt es Möglichkeiten, eine Fortsetzung abstrakter auszudrücken als eine Prozedur?" Wenn Sie es als Typ ausdrücken, erhalten Sie eine viel größere Abstraktion, sodass Sie die Fortsetzung auf sehr allgemeine Weise behandeln können, sodass Sie mit der Fortsetzung auf viel mehr Arten interagieren können, als nur sie auszuführen.