У меня возникли проблемы с пониманием поведения следующей программы Scheme:
(define c
(dynamic-wind
(lambda () (display 'IN)(newline))
(lambda () (call/cc (lambda (k)
(display 'X)(newline)
k)))
(lambda () (display 'OUT)(newline))))
Как я понимаю, c будет привязан к продолжению, созданному прямо перед "(display '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) <--
Я ожидал, что каждый вызов (c) будет делать одно и то же — печатать IN, X и OUT. Что мне не хватает?