継続利用の具体例
global変数に入れる
code:gauche
(h
(call/cc
(lambda (cont-proc)
(let ((v (f 入力)))
(set! reuse cont-proc)
(g v) ;; 今度はcont-procを呼び出していないので普通に手続きは終了する
))))
=> (h (g v))
global変数に、継続を代入できる
すごい
けど、何に使う?
状態モナド的な
処理の一時停止と再開
code:gauche
(define (re-entrant stop-cont)
(call/cc
(lambda (continue)
(stop-cont continue))) ;; 再開用の手続きを渡して一端終了
(continued-body) ;;continueが呼び出されると実行される
...
)
このコードだけではわかりにくい
実際に動かせるコードを用意したい
CPS具体例
for-each
例外
コルーチン
疑似マルチタスク
協調的マルチタスク(call/cc軽量スレッド)
バックトラック
ツリー探索
thread
generator
非決定性
具体例