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