Next: 8.3 無限の ExtentをもつContinuation
Up: 8 Continuation(継続)
Previous: 8.1 Call/CC
Call/CCには,1つの引数をとる手続きを引数として与えます.
==> (+ 1 (call/cc (lambda (cc) (+ 20 300))))
321
ここでは,(lambda (cc) (+ 20 300))の計算結果がCall/CCの
結果となります.
これは,CommonLispで,
<cl> ((lambda (val) (+ 1 val)) (+ 20 300))
321
と同じ扱いになります.
もし,Call/CCに渡された計算手続きの引数が手続きとして
実行された場合には,その手続きの引数の計算結果が
call/ccが呼ばれた時点のcontinuationに渡され,
そのcontinuationにその計算結果を渡した結果が
(+ 1 (call/cc ...))の結果として返ります.
==> (+ 1 (call/cc (lambda (cc)
(+ 20 (cc 300)))))
301
(lambda (cc) (+ 20 (cc 300)))では,(cc 300)という
式を実行しており,この300がcall/ccの結果として返ります.
これは,CommonLispでは,
<cl> ((lambda (val) (+ 1 val)) 300)
301
または,
<cl> ((lambda (val) (+ 1 val))
(catch 'cc
((lambda (v) (+ 20 v))
(throw 'cc 300))))
301
と同じ扱いになります.
generated through LaTeX2HTML. M.Inaba 平成18年5月6日