とりあえず、例を紹介します。
(define (divider x y cont) ; divider は x, y, と継続 cont を引数にする関数 (if (= y 0) ; (= y 0) の場合は、 (cont 'exception) ; cont に即座に復帰し、返り値は 'exception となる。 (/ x y))) ; それ以外なら(/ x y) を返します (define (caller x y) ; divider を呼ぶ関数 ; call-with-current-continuation は、 ; 現在のプログラムの実行状況(continuation)をとりだし、 (call-with-current-continuation ; 引数(この場合ラムダ式)である関数に、そのcontinuation を適用します。 (lambda (cont) ; つまり、先程の continuation は変数 cont に格納された。 (let ((val (divider x y cont))) ; 適用の結果、この式が実行され、 (display "Val:") ; そのまま計算が進みます。 (display val) ; 但し、途中で cont が使われれば、 (newline) ; 即座に cont に復帰します。 val)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > (caller 10 2) Val:5 5 > (caller 10 0) now start exception
99.10.7/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp