環境は計画の継続の一部ではありませんか?
私はこれを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
では、継続は制御にのみ影響し、環境には影響しませんか?この場合、継続を実装する方法の1つが「スタックをコピーする」ことであると言われるのはなぜですか(バインディングはスタックにありませんか?)