[plt-scheme] trying to understand PLAI route-producer code...
Hi all,
I'm quite desperately trying to understand the route-producer code
from PLAI (the mutating version) for some time now, but somehow I
don't get it ...
The code is:
(define route-producer
(local ((define resume (box false)))
(lambda (real-send)
(local ((define send-to (box real-send))
(define send (lambda (value-to-send)
(set-box! send-to
(let/cc k
(begin
(set-box! resume k)
((unbox send-to) value-to-
send)))))))
(if (unbox resume)
((unbox resume) real-send)
(begin
(send 'providence)
(send 'houston)
(send 'bangalore)))))))
(call/cc route-producer)
My main problem is the
(set-box! send-to
(let/cc k
(begin
(set-box! resume k)
((unbox send-to) value-to-
send)))))))
part. I don't understand how I can ever get any value out from a
single call. The first time, (send 'providence) will be executed, but
it would seem to me that this - besides storing the continuation in
resume - just sets the box value to the result to the application of
'providence to the first boxed continuation. Or now I think - perhaps
nothing is stored in the box, because the continuation returns
immediately, without ever executing this mutation? But here I'm on the
wrong track too I think, because then the box value would never get
updated...
I've also looked for an "easier" way to simulate this, but did not get
it working. I've tried something like (doesn't work)
(define thebox (box (call/cc (lambda (k) (lambda (value) (k value))))))
(set-box! thebox
(let/cc k
(begin
(display "beginning")
((unbox thebox) 'value-to-send))))
Here already, it's not clear to me to which original value to set the
box to simulate the producer example.
Perhaps someone has time for a littel hint what to do to understand
the code...
Thanks a lot in advance
Sigrid