I am having some trouble understanding the behavior of the following Scheme program:
(define c
(dynamic-wind
(lambda () (display 'IN)(newline))
(lambda () (call/cc (lambda (k)
(display 'X)(newline)
k)))
(lambda () (display 'OUT)(newline))))
As I understand, c will be bound to the continution created right before "(display 'X)".
But using c seems to modify itself! The define above prints (as I expected) IN, X and OUT:
IN
X
OUT
And it is a procedure:
#;2> c
#<procedure (a9869 . results1678)>
Now, I would expect that when it is called again, X would be printed, and it is not!
#;3> (c)
IN
OUT
And now c is not a procedure anymore, and a second invokation of c won't work!
#;4> c ;; the REPL doesn't answer this, so there are no values returned
#;5> (c)
Error: call of non-procedure: #<unspecified>
Call history:
<syntax> (c)
<eval> (c) <--
I was expecting that each invokation to (c) would do the same thing -- print IN, X, and OUT. What am I missing?