anchor.diff:  (defun extract-min (heap)
     (declare (type rank-pairing-heap heap))
     (let ((root (slot-value heap 'root))
  -        (buckets (make-array (ceiling (log most-positive-fixnum (/ (1+ (sqrt 5)) 2)))
  +        (size (slot-value heap 'size))
  +        (buckets (make-array #.(ceiling (log most-positive-fixnum (/ (1+ (sqrt 5)) 2)))
                                ;; approx of max. required buckets
                                :element-type '(or null node)
                                :initial-element nil)))
  -    (declare (dynamic-extent buckets))
  -    (if (zerop (decf (slot-value heap 'size)))
  +    (declare (dynamic-extent buckets)
  +             (optimize (speed 3) (space 0))
  +             (type (integer 1 #.most-positive-fixnum) size))
  +    (if (zerop (setf (slot-value heap 'size) (1- size)))
           (setf (slot-value heap 'root) nil)
           (let (tree)
             (loop for i = (node-lchild root) then next
  
positive.code:                 while next
                  finally
                     (loop for v across buckets
                           when v
                             do (setf tree (link v tree))
                           finally
  
negative.code: 
  (defclass rank-pairing-heap ()
    ((size :initform 0 :initarg :size
           :type (integer 0 *)
           :accessor heap-size-access)
     (root :initform nil :initarg :roots
           :type (or null node))))
  
  