Frage

Wer weiß, wenn call/cc mit nur lambdas und Schließungen umgesetzt werden?

Es scheint, dass call/cc unterbricht den Fluss des Programms (wie eine Ausnahme), aber lambdas und Verschlüsse können das nicht tun. Deshalb denke ich, call/cc kann nicht über Lambdas und Schließungen umgesetzt werden.

Jede weitere Ideen?

War es hilfreich?

Lösung

Die Frage ist nicht besonders deutlich, da das, was genau „umgesetzt mit nur lambdas und Schließungen“ bedeutet?

In jedem Fall können Fortsetzungen in jeder Sprache mit Schließungen von manuell in Fortsetzung Passstil verwendet werden . Dann automatische Übersetzung in dieser Form kann durch die Verlängerung der Compiler implementiert werden, die typischerweise Lisps auf Benutzerebene durch Makros ermöglichen. siehe zum Beispiel cl-cont , eine Bibliothek Fortsetzungen für Common Lisp Implementierung, die eine ist Sprache, die sie nicht haben eingebaut.

Effiziente Pervasive Fortsetzungen wie in Schema sind wahrscheinlich auf eine niedrigere Ebene umgesetzt werden direkt mit dem Programm-Stack zu tun, aber das ist keine Voraussetzung, nur eine Optimierung.

Andere Tipps

In Schema können Sie implementieren call/cc lambdas verwenden, wenn zur Fortsetzung Umwandlung vorbei Stil (CPS). Wenn in CPS Umwandlung kann jedes Vorkommen von call/cc mit folgendem Äquivalent ersetzt werden:

(lambda (f k) (f (lambda (v k0) (k v)) k))

wo k ist die Fortsetzung gespeichert werden, und (lambda (v k0) (k v)) ist die Escape-Prozedur, die diese Fortsetzung wieder her (was auch immer Fortsetzung k0, die aktiv ist, wenn es aufgerufen wird, wird verworfen).

Also, Ihre Frage für Schema zu beantworten:. Ja, es kann getan werden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top