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?