>>269
3行の短かい答え:
発想は悪くない。
shift/resetで
ぐぐれ。


長い答え:
継続が戻ってくれば副作用無くなるというのはその通り。良い発想をしている。

しかし、継続から戻ってくるには継続が終わる必要があるが、継続の終わりとはどこかという問題がある。
REPLの終わりか、プロセスの終わりか、OSの終了か、世界の終わりか。

そこで、「ここまで来たら継続の終わり」という演算子を定めてやる。
その演算子をresetと呼ぶ。で、resetまでの継続を取り出す演算子をcall/ccとは区別してshiftと呼ぶ。
すると、shiftが捉える継続(を関数にしたもの)は副作用を持たない純粋な関数になる。
; shift以外には副作用はないものとする

例:
(+
(reset
(+ (shift (lambda (c) (+ (c 1) (c 2))))
3))
4)

ここで、cには (lambda (x) (+ x 3)) という関数が入る。resetの外の+4は入らない。
(c 1) は 4、(c 2) は 5。という風に、普通の関数と同じように使える。