环境不是计划延续的一部分吗?
我已经用 Chicken、Gauche、Racket 和 Gambit 对此进行了测试,它们的行为都相似:
(define kont #f)
(let ((a 1)
(b 2))
(call-with-current-continuation
(lambda (k)
(set! kont k)
(display 'mutating)
(newline)
(set! a -1)
(set! b -2)))
(display (+ a b))
(newline))
我希望在评估 LET 时为 -3,但在对 kont 的调用中为 +3(因为我认为程序会在突变之前记住 a 和 b 的绑定):
(let ... ) ; <-- evaluating the LET above
; prints "mutating"
=> -3
(kont 100)
=> -3
(kont 100)
=> -3
所以延续只影响控制,而不影响环境?在这种情况下,为什么说实现延续的方法之一是“复制堆栈”(绑定不在堆栈上?)