我们先举一个简单的例子示意一下我们上面的方便函数怎么用:
(define (prime? n) (call/cc (lambda (return) (do ((i 2 (+ i 1))) ((> i (sqrt n)) #t) (if (= (modulo n i) 0) (return #f)))))) (define gen-prime (lambda (hi) (let ((i (number-between 2 hi))) (assert (prime? i)) i)))
其实这里就只是定义了一个函数 prime?,它可以判断一个数是不是 素数。然后我们定义了一个函数 gen-prime,它说:“ *从 2 到 hi 取一个数,它必须是一个素数。* ”
我们用 (gen-prime 20) 就能返回 20 以内的第一个素数。如果我们 要得到下一个素数,就调用 (amb)。不断调用 (amb) 就得到后面的 素数,直到超过 20,我们就会看到 "amb tree exhausted".
如果用
(bag-of (gen-prime 20))
我们就能一次性得到所有 20 以内的素数在一个 list 里。