;; First try (load "search-for-primes-common.ss") (define (timed-prime-test n) (timed-function-test (lambda () (prime? n)))) (define (cut-precision inexact digits) (define factor (expt 10 digits)) (/ (round (* inexact factor)) factor)) (define (report-prime n elapsed-time) (begin (display n) (display ": ") (display (cut-precision elapsed-time 4)) (newline))) (define (display-timed-primes prime-results) (if (not (null? prime-results)) (letrec ((first-result (car prime-results)) (prime (car first-result)) (elapsed-time (cdr first-result))) (begin (report-prime prime elapsed-time) (display-timed-primes (cdr prime-results)))))) (define (search-for-3-primes start) (search-for-primes 3 start)) ;;; (define (search-for-primes how-many start) (define (_search-for-primes how-many start results) (if (= how-many 0) (reverse results) (let-values (((primality elapsed-time) (timed-prime-test start))) (_search-for-primes (if primality (- how-many 1) how-many) (+ start 2) (if primality (cons (cons start elapsed-time) results) results))))) (_search-for-primes how-many (if (even? start) (+ start 1) start) '()))