anchor.diff:  
   (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))))
  +         (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))))
  +    (declare (type candidate candidates))
  +    (declare (optimize (speed 3)))
       (loop for x from 1 to lmt do
   	 (loop for y from 1 to lmt do
   	      (progn
  
positive.code: (defpackage :cl-prime-sieve
    (:use :common-lisp)
    (:export :sum-of-squares
  	   :get-prime-candidates-map
  	   :atkin-sieve
  	   :get-primes))
  
  (in-package :cl-prime-sieve)
  
  (defun sum-of-squares(x y &key (a 1) (b 1))
    (+ (* a x x) (* b y y)))
  
  ;; The macro has been specifically desgined to capture 
  ;; limit and candidates variables within the caller.
  
negative.code:   (setf (aref candidates 3) T)
    candidates)
  
  (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))
  