【发布时间】:2011-03-03 04:47:29
【问题描述】:
我在理解以下行为时遇到了一些麻烦 方案程序:
(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。我错过了什么?
【问题讨论】:
标签: scheme racket continuations