Suche nach dem konstruiertes Beispiel Code: Fortsetzungen!
-
09-09-2019 - |
Frage
Also ich glaube, ich Fortsetzungen verstehe jetzt, zumindest auf einer bestimmten Ebene, dank der Gemeinde Schema Wiki und Weitere Schema in Fixnum Tage .
Aber ich würde mehr Praxis mag -. Das heißt, mehr Beispielcode ich in meinem Kopf durcharbeiten kann (vorzugsweise gekünstelt, so dass es nicht fremde Sachen von dem Konzept abzulenken)
Speziell , würde Ich mag mit Fortsetzungen durch mehr Probleme arbeiten, und / oder Koroutinen wieder aufnehmen, im Gegensatz zu nur sie mit einer Schleife zu beenden, oder was auch immer (was recht einfach ist).
Wie auch immer, wenn Sie wissen, von guten Tutorials neben denen, die ich oben verlinkt, oder wenn Sie etwas schreiben würde interessieren Sie geschrieben haben, die eine gute Übung wäre, würde ich sehr dankbar sein!
Lösung
Ja, können Fortsetzungen sein ziemlich knifflige. Hier ist ein gutes Puzzle ich eine Weile zurück gefunden - versuchen Sie herauszufinden, was gedruckt ist und warum:
(define (mondo-bizarro)
(let ((k (call/cc (lambda (c) c)))) ; A
(write 1)
(call/cc (lambda (c) (k c))) ; B
(write 2)
(call/cc (lambda (c) (k c))) ; C
(write 3)))
(mondo-bizarro)
Erklärung, wie dies funktioniert (enthält Spoiler!):
- Die ersten
call/cc
speichert gibt es eigene Fortsetzung und speichert sie ink
. - Die Zahl
1
auf den Bildschirm geschrieben werden. - Die aktuellen Fortsetzungs, die am Punkt B fortgesetzt werden soll, zurückgeführt wird K, die zu einem kehrt
- Dieses Mal wird k jetzt auf die Fortsetzung gebunden wir bei B bekam
- Die Zahl
1
geschrieben wieder auf den Bildschirm - Die aktuellen Fortsetzungs, die am Punkt B fortgesetzt werden soll, zurückgeführt wird K, das ist ein andere (aber unterschiedliche) Fortsetzung zu einem anderen Punkt B
- Sobald wir wieder in der ursprünglichen Fortsetzung sind, ist es wichtig, dass hier k beachten noch zu A gebunden ist,
- Die Zahl
2
wird auf den Bildschirm geschrieben - Die aktuellen Fortsetzungs, die am Punkt C fortgesetzt werden soll, zurückgeführt wird K, die zu einem kehrt
- Dieses Mal wird k jetzt auf die Fortsetzung gebunden wir bei C bekamen
- Die Zahl
1
geschrieben wieder auf den Bildschirm - Die aktuellen Fortsetzungs, die am Punkt B fortzusetzen ist, wird zurückgegeben, bis k, die zu C zurück
- Die Zahl
3
wird auf den Bildschirm geschrieben - und fertig
Daher ist die korrekte Ausgabe 11213
. Der häufigste Knackpunkt Ich habe in fettgedrucktem Text gesetzt - es ist wichtig zu beachten, dass, wenn Sie Fortsetzungen zu ‚Reset‘ den Wert von k verwenden, die es nicht den Wert von k in der ursprünglichen Fortsetzung zurück auswirkt. Sobald Sie wissen, dass es leichter zu verstehen wird.
Andere Tipps
Brown University Programmiersprachen Kurs hat eine Problem auf Fortsetzungen gesetzt öffentlich verfügbar.