Domanda

Così credo di capire continuazioni ora, almeno a un certo livello, grazie alla sistema comunitario wiki e Imparare Regime Fixnum Giorni.

Ma mi piacerebbe di più la pratica, che è, più il codice di esempio posso lavorare attraverso la mia testa (preferibilmente forzato, quindi non c'è estraneo roba per distrarre l'attenzione dal concetto).

In particolare, Mi piacerebbe lavorare attraverso più problemi con le continuazioni che riprendere e/o coroutines, mentre solo il loro utilizzo per uscire da un loop o qualsiasi altra cosa (è abbastanza semplice).

Comunque, se si conosce un buon tutorial oltre a quelli che ho linkato sopra, o se volete postare qualcosa che ho scritto che sarebbe un buon esercizio, sarei molto riconoscente!

È stato utile?

Soluzione

Sì, continuazioni può essere abbastanza la mente di flessione.Ecco un puzzle bene ho trovato un po ' indietro - cercare di capire cosa c'è stampato e perché:

(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)

Spiegazione di come funziona (contiene spoiler!):

  1. Il primo call/cc negozi restituisce proprio la continuazione e lo memorizza in k.
  2. Il numero 1 è scritto sullo schermo.
  3. L'attuale è la continuazione, che è quello di continuare al punto B, è tornato a k, che restituisce Un
  4. Questa volta, k è ora associato alla prosecuzione siamo arrivati al B
  5. Il numero 1 è scritto per lo schermo
  6. L'attuale è la continuazione, che è quello di continuare al punto B, è tornato a k, che è un altro (ma diverso) la continuazione di un altro punto B
  7. Una volta che siamo tornati in originale continuazione, è importante notare che qui k è ancora legato a
  8. Il numero 2 è scritto sullo schermo
  9. L'attuale è la continuazione, che continua nel punto C, è tornato a k, che restituisce Un
  10. Questa volta, k è ora associato alla continuazione che abbiamo ottenuto a C
  11. Il numero 1 è scritto per lo schermo
  12. L'attuale è la continuazione, che è quello di continuare al punto B, è tornato a k, che restituisce a C
  13. Il numero 3 è scritto sullo schermo
  14. E il gioco è fatto

Di conseguenza, l'output corretto è 11213.Il più comune punto di attaccare ho messo in grassetto il testo - è importante notare che quando si utilizza la continuazione di 'reset', il valore di k che non influenzano il valore di k torna in originale continuazione.Una volta che sapete che diventa più facile capire.

Altri suggerimenti

Naturalmente i linguaggi di programmazione della Brown University ha un problema impostato su continuazioni a disposizione del pubblico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top