【发布时间】:2013-08-08 07:32:39
【问题描述】:
我想知道以下两个代码之间的区别:
(define cont2 #f)
(call/cc (lambda (k) (set! cont2 k)))
(display "*")
(cont2 #f)
和
(let [(cont #f)]
(call/cc (lambda (k) (set! cont k)))
(display "*")
(cont #f))
在我看来,这两个程序的正确行为应该是无限打印'*'。 但是,第一个只打印一个'*'并退出, 而第二个给出了正确的行为。
所以我很困惑。 define 有什么特别之处吗?
或者延续不是我想的那样——后面的所有程序,直到程序结束,似乎都有边界什么的。
另一种猜测是顶层环境是特殊处理的,像这样:
(define (test)
(define cont2 #f)
(call/cc (lambda (k) (set! cont2 k)))
(display "*")
(cont2 #f))
(test)
这行得通,但为什么呢?
感谢您的帮助!
【问题讨论】:
标签: scheme racket continuations