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!

War es hilfreich?

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!):

  1. Die ersten call/cc speichert gibt es eigene Fortsetzung und speichert sie in k.
  2. Die Zahl 1 auf den Bildschirm geschrieben werden.
  3. Die aktuellen Fortsetzungs, die am Punkt B fortgesetzt werden soll, zurückgeführt wird K, die zu einem
  4. kehrt
  5. Dieses Mal wird k jetzt auf die Fortsetzung gebunden wir bei B bekam
  6. Die Zahl 1 geschrieben wieder auf den Bildschirm
  7. 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
  8. Sobald wir wieder in der ursprünglichen Fortsetzung sind, ist es wichtig, dass hier k beachten noch zu A gebunden ist,
  9. Die Zahl 2 wird auf den Bildschirm geschrieben
  10. Die aktuellen Fortsetzungs, die am Punkt C fortgesetzt werden soll, zurückgeführt wird K, die zu einem
  11. kehrt
  12. Dieses Mal wird k jetzt auf die Fortsetzung gebunden wir bei C bekamen
  13. Die Zahl 1 geschrieben wieder auf den Bildschirm
  14. Die aktuellen Fortsetzungs, die am Punkt B fortzusetzen ist, wird zurückgegeben, bis k, die zu C zurück
  15. Die Zahl 3 wird auf den Bildschirm geschrieben
  16. 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.

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