1(define primes 2 (eval 3 ;;; check for composite numbers by testing the 4 ;;; most probable divisors first 5 '(let* ((start (list 2)) 6 (end start)) 7 (letrec 8 ((composite? 9 (lambda (v l) 10 (let ((d (car l))) 11 (if (> (* d d) v) #f 12 (if (zero? (remainder v d)) #t 13 (composite? v (cdr l))))))) 14 (findnext 15 (lambda (v) 16 (if (composite? v start) 17 (findnext (+ v 1)) v)))) 18 (lambda () 19 (let* ((current (car end)) 20 (next (findnext (+ current 1))) 21 (p (cons next '()))) 22 (set-cdr! end p) 23 (set! end p) 24 current)))))) 25 26(define displayprimes 27 (lambda (n) 28 (if (not (zero? n)) 29 (begin 30 (display (primes)) (newline) 31 (displayprimes (- n 1)))))) 32 33(displayprimes 14) 34