我在理解以下 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) <--
我期待对 (c) 的每次调用都会做同样的事情——打印 IN、X 和 OUT。我错过了什么?