環境はスキームの継続の一部ではありませんか?環境は継続の一部ではありませんか?
私はチキン、ゴーシュ、ラケットとギャンビットでこれをテストしており、それらのすべてが同様に振る舞う:LETが評価されたとき、私は-3期待するが、通話中3はKONTする
(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))
を(私は)プログラムは、変異前とBのバインディングを覚えているだろうと思ったので、:
(let ...) ; <-- evaluating the LET above
; prints "mutating"
=> -3
(kont 100)
=> -3
(kont 100)
=> -3
ので継続は制御だけではなく、環境に影響を与えますか?この場合、継続を実装する方法の1つが「スタックをコピーする」ことになっているのはなぜですか(バインディングはスタック上にありません)。
または継続は環境とバインディングを運ぶことになりますが、これらは*変更可能ですか? – josh