Kann jemand bitte diese Fortsetzung in Schema erklären?
-
22-07-2019 - |
Frage
ich Fortsetzungen lerne, aber ich kann meinen Kopf nicht umschlingen diesen Code. Warum geht es in Endlosschleife?
(let ((cont #f))
(call/cc (lambda (k)
(set! cont k)))
(cont #f))
Lösung
Zeile für Zeile:
- definieren wir lokale Variable
cont
- nennen wir mit aktuellen Fortsetzung einige Lambda-Funktion, das heißt, wir die aktuelle Fortsetzung der Lambda-Funktion als Argument sind vorbei. Aktuelle Fortsetzung ist eine Funktion von 1 Argumente, dieses Argument dann als „Rückgabewert“ von
call/cc
verwendet wird (und hier wird schließlich ignoriert). - So
k
hier alles bedeutet, dass nach geschehen wird, in unserem Fall etwas in der Nähe in Sinne(lambda (call/cc-retval) (let () call/cc-retval (cont #f)))
. Wir setzencont
Wert auf diese Fortsetzung.call/cc
kehrt zurück. - Da
cont
ist jetzt eine Funktion, die die Fortsetzung dargestellt, und es ist Argument der „Rückgabewert von Call / cc“ ist, nennen wir nur diese Funktion, wird das Argument ignoriert, und wir müssen wieder die(cont #f)
nennen.
So, was wir bekommen schließlich ist Endlosschleife.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow