anchor.diff:  		  (funcall stage3 x y)))))
       candidates))
   
  -(defun atkin-sieve(candidates)
  +(defun atkin-sieve-map(candidates)
     (let ((len (length candidates)))
       (loop for i from 1 to (1- len)
          when (aref candidates i)
  
positive.code: 
  (defun get-atkin-prime-candidates-map(limit)
    (let* ((lmt (isqrt limit))
  	 (candidates (make-array (1+ limit) :initial-element nil))
  	 (stage1 (get-sieve-function 4 1 '(1 5)))
  	 (stage2 (get-sieve-function 3 1 '(7)))
  	 (stage3 (get-sieve-function 3 -1 '(11))))
      (loop for x from 1 to lmt do
  	 (loop for y from 1 to lmt do
  	      (progn
  
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.
  