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