==> (+ 1 (call/cc (lambda (cc) (set! old-cc cc) (+ 20 (cc 300))))) 301 ==> (old-cc 500) 501 ==> (old-cc 200) 201というように,call/ccが呼ばれた時点のcontinuationが old-ccに代入されており,(old-cc 500)とした場合に, (+ 1 (call/cc ...))の計算の継続がなされ,501が計算結果と して返されます.(old-cc 200)としたらば201となっています. しかし,CommonLispでは,
<cl> (+ 1 (catch 'tag (+ 20 (throw 'tag 300)))) 301 <cl> (throw 'tag 500) Error: there was no pending CATCH for the tag TAGというように,catchの外側から,throwを呼び出すことは できません.これは,call/ccのcontinuationは, 無限のextentを持っているのに対して,throw/catchのタグは 動的なextentしか持たないからです.