21 Stimmen

Suche nach Beispielen für die "echte" Verwendung von Fortsetzungen

Ich versuche, das Konzept der Fortsetzungen zu begreifen, und habe mehrere kleine Lehrbeispiele wie dieses aus dem Wikipedia-Artikel :

(define the-continuation #f)

(define (test)
  (let ((i 0))
    ; call/cc calls its first function argument, passing 
    ; a continuation variable representing this point in
    ; the program as the argument to that function. 
    ;
    ; In this case, the function argument assigns that
    ; continuation to the variable the-continuation. 
    ;
    (call/cc (lambda (k) (set! the-continuation k)))
    ;
    ; The next time the-continuation is called, we start here.
    (set! i (+ i 1))
    i))

Ich verstehe, was diese kleine Funktion bewirkt, aber ich kann keine offensichtliche Anwendung dafür erkennen. Ich erwarte zwar nicht, dass ich in nächster Zeit überall in meinem Code Fortsetzungen verwenden werde, aber ich wünschte, ich wüsste ein paar Fälle, in denen sie sinnvoll sein können.

Ich bin also auf der Suche nach explizit nützlichen Codebeispielen, die zeigen, was Fortsetzungen mir als Programmierer bieten können.

Zum Wohl!

1voto

Justin Smith Punkte 2373

Wenn Sie eine asynchrone Aktion aufrufen und die Ausführung aussetzen müssen, bis Sie das Ergebnis erhalten, würden Sie normalerweise entweder das Ergebnis abfragen oder den Rest Ihres Codes in einen Callback packen, der von der asynchronen Aktion nach Abschluss ausgeführt wird. Bei Continuations entfällt die ineffiziente Option des Polling, und Sie müssen nicht den gesamten Code, der nach dem asynchronen Ereignis ausgeführt werden soll, in einen Callback verpacken - Sie übergeben einfach den aktuellen Status des Codes als Callback - und der Code wird effektiv "aufgeweckt", sobald die asynchrone Aktion abgeschlossen ist.

0voto

jfs Punkte 370717

Fortsetzungen können verwendet werden, um Ausnahmen und einen Debugger zu implementieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X