Shi*_* Wu 4 scheme continuations racket
我想知道以下两个代码之间的区别:
(define cont2 #f)
(call/cc (lambda (k) (set! cont2 k)))
(display "*")
(cont2 #f)
Run Code Online (Sandbox Code Playgroud)
和
(let [(cont #f)]
(call/cc (lambda (k) (set! cont k)))
(display "*")
(cont #f))
Run Code Online (Sandbox Code Playgroud)
在我看来,这两个程序的正确行为应该是无限地打印'*'.但是,第一个只打印一个'*'并退出,而第二个给出正确的行为.
所以我很困惑.是否有一些特殊的事情define
或延续不是我想的 - 所有以下程序,直到程序结束,它似乎有一个边界或东西.
另一个猜测是顶级环境是特殊处理的,如下所示:
(define (test)
(define cont2 #f)
(call/cc (lambda (k) (set! cont2 k)))
(display "*")
(cont2 #f))
(test)
Run Code Online (Sandbox Code Playgroud)
这有效,但为什么呢?
谢谢您的帮助!