call/ccで全く同じ状況が繰り返されるわけではない
「call/ccはゲームのセーブ/ロードみたいなもの」という説明で「call/ccが呼ばれた時点でのインタプリタの全状態が保存される」「全く同じ状況が再現される」的な理解をしている人がいたので違うよというコードを書いた。あくまで保存されるのは現在のスコープだけであって、外のスコープを書き換えたらそれの影響は受ける。
gosh> (define x 1) x gosh> (define c 0) c gosh> (define (foo) (call/cc (lambda (c_) (set! c c_))) x) foo gosh> (foo) 1 gosh> c #<subr continuation> gosh> (c) 1 gosh> (set! x 2) 2 gosh> (c) 2
西尾泰和(nishio.hirokazu) 14:40
ゲームデータのセーブでアイテムはセーブされるけど、FPSやコントローラの設定は別スコープ、みたいな。西尾泰和(nishio.hirokazu)14:41
グローバル変数いくない!ってことじゃないのw
引数で渡せばいいわけでw