chamada com continuação de corrente - conceito de economia de estado

Depois de lerO planejador experiente Eu senti que entendicall/cc devidamente. Mas, depois de ver alguns truques do WOW comcall/cc Eu descobri que estava errado.

(define cc 0)
(define (f)
  (call/cc (lambda (k)
             (set! cc k)
             3)))

(+ 1 2 4 (f)) ; eval's to 10
(cc 13) ; eval's to 20

Isso combina perfeitamente com o meu entendimento. Eu acho que quando eu alcanço umcall/cc Estou apenas salvando o estado do programa. e chamando a função próxima a ela com uma função. Se essa função (k) é chamado de algum lugar do que eu apenas substituindo todo(call/cc ...) coisas com o parâmetro dado a ele.O programa acima parece ter funcionado dessa maneira também

Mas,

(define (itr lst)
  (define (state k)
    (for-each (lambda (item)
                (call/cc (lambda (h)
                           (set! state h)
                           (k item))))
              lst)
    (k 'done))

  (define (generator)
    (call/cc (lambda (k) (state k))))
  generator)

(define (next)
  (itr (range 2)))

Chamandonext 3 vezes produz 0, 1 e'done. Isso significa quandostate usou a funçãok dado porgenerator não restaurou o estado do programa.Acabei de mostrar que tentei entender.

Então, comocall/cc realmente funciona?

questionAnswers(2)

yourAnswerToTheQuestion