anchor.diff:    (setf (aref candidates 3) T)
     candidates)
   
  -(defun eratosthene-sieve(limit)
  +(defun eratosthene-sieve-map(limit)
     (let ((candidates (make-array (1+ limit) :initial-element T)))
  +    (declare (type candidate candidates))
  +    (declare (optimize (speed 3)))
       (progn
         (setf (aref candidates 0) nil)
         (setf (aref candidates 1) nil))
  
positive.code: 		  (funcall stage3 x y)))))
      candidates))
  
  (defun atkin-sieve(candidates)
    (let ((len (length candidates)))
      (loop for i from 1 to (1- len)
         when (aref candidates i)
  
negative.code: (defpackage :cl-prime-sieve
    (:use :common-lisp)
    (:export :sum-of-squares
  	   :atkin-sieve-map
             :eratosthene-sieve-map
  	   :get-primes))
  
  (in-package :cl-prime-sieve)
  
  (defun sum-of-squares(x y &key (a 1) (b 1))
    (+ (* a x x) (* b y y)))
  
  (deftype candidate() 
    '(simple-array boolean (*)))
  
  ;; The macro has been specifically desgined to capture 
  ;; limit and candidates variables within the caller.
  