У меня возникли проблемы с пониманием поведения следующей программы Scheme:
(define c
(dynamic-wind
(lambda () (display 'IN)(newline))
(lambda () (call/cc (lambda (k)
(display 'X)(newline)
k)))
(lambda () (display 'OUT)(newline))))
Как я понимаю, c будет связан с продолжением, созданным непосредственно перед "(отобразить 'X)".
Но использование c, кажется, меняет себя!Определение выше печатает (как я и ожидал) IN, X и OUT:
IN
X
OUT
И это процедура:
#;2> c
#<procedure (a9869 . results1678)>
Теперь я ожидал бы, что когда он вызывается снова, X будет напечатан, а это не так!
#;3> (c)
IN
OUT
А теперь c больше не процедура, и второе обращение к c не будет работать!
#;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ожидал, что каждый вызов (c) будет делать то же самое - печатать IN, X и OUT.Чего мне не хватает?