Next: 10.0.1 Chez Schemeでの実行
Up: ソフトウェア特論 講義資料 Scheme言語とインタプリタ
Previous: 9.5 Call/CCの定義
先にあげたcontinuationのプログラム例
ですが,nilというシンボルは無いので,()で表記します.
; continuation-sample.scm
(define (print-table l)
(call/cc
(lambda (escape)
(set! not-a-number escape)
(map print-sqrt-abs l))))
(define (print-sqrt-abs x)
(write (sqrt (abs (must-be-number x))))
(newline))
(define (must-be-number x)
(if (number? x) x
(not-a-number "huh?")))
(define (map fn l)
(if (null? l)
()
(cons (fn (car l))
(map fn (cdr l)))))
(define backtrack-points ())
(define (choose-first f g)
(call/cc
(lambda (k)
(set! backtrack-points
(cons (lambda () (k (g)))
backtrack-points))
(f))))
(define (random-choice f g)
(if (= 1 (random 2))
(choose-first f g)
(choose-first g f)))
(define (fail)
(let ((last-choice (car backtrack-points)))
(set! backtrack-points (cdr backtrack-points))
(last-choice)))
(define (integer)
(random-choice
(lambda () 1)
(lambda () (+ 1 (integer)))))
(define (even)
(let ((n (integer)))
(if (even? n) n (fail))))
(define (iter f n)
(write (f)) (newline)
(if (> n 0)
(iter f (- n 1))))
(define (integer)
(ambiguous 1 (+ 1 (integer))))
generated through LaTeX2HTML. M.Inaba 平成18年5月6日