08/06/01 10:53:39
(define-syntax amb
(syntax-rules ()
((_) (fail))
((_ a) a)
((_ a b ...)
(let ((fail0 fail))
(call/cc
(lambda (cc)
(set! fail
(lambda ()
(set! fail fail0)
(cc (amb b ...))))
(cc a)))))))
(define call/cc call-with-current-continuation)
(define fail #f)
(define (require pred)
(or pred (amb)))
(call/cc
(lambda (cc)
(set! fail
(lambda ()
(cc 'no-choise)))))