;;;  File: Primes.lsp
;;; 
;;;  Create a list of prime numbers
;;; 
;;;  Author:  Bary W Pollack
;;;  Date:    Feb. 2, 2003
;;; 
;;;  Demonstrate use of dotimes and dolist
;;; 

;;;  --------------------------------------------------------------
;;;  top-level driver - accumulate a list of prime numbers

(defun primes (max)
    (let ((p '(2)) n)
         (dotimes (j (- max 2) p)
             (setq n (+ j 3))
             (if (pcheck n p)
                 (setq p (append p (list n))) ))))

;;;  --------------------------------------------------------------
;;;  pcheck - determine primality of a prime-candidate

(defun pcheck (n primelist)
    (let ((q (sqrt n)))
         (dolist (pk primelist t)
                 (if (and (<= pk q) (zerop (mod n pk)))
                     (return nil) ))))

(princ "The primes under 100 are: ")
(print (primes 100))

