anchor.diff:    (get-index-fn nil :type function)
     (items nil :type array))
   
  -(defun make-empty-queue (compare-fn set-index-fn get-index-fn &key (size 100) (element-type t))
  +(defun make-empty-queue (compare-fn set-index-fn get-index-fn &key (size 100))
     "Return a new empty queue.
   
   compare-fn is a function that takes two arguments and returns a true
  
positive.code: (in-package #:priority-queue)
  
  ;;;; Conditions
  
  (define-condition empty-queue-error (error)
    ()
  
negative.code: item-not-found-error if the item wasn't found."
    (when (queue-empty-p q)
      (error 'empty-queue-error))
    (let ((heap (q-items q))
          (compare-fn (q-compare-fn q))
          (get-index-fn (q-get-index-fn q))
          (set-index-fn (q-set-index-fn q)))
     (let ((index (funcall get-index-fn item)))
       (declare (fixnum index))
       (when (or (null index)
                 (= index +not-in-queue+))
         (error 'item-not-found-error))
       (let ((L (length heap)))
         (cond ((or (= L 1)
                    (= index (1- L)))
                ;; There is only one item in the heap or the item we are
                ;; after is positioned last in the heap.
                (decf (fill-pointer heap)))
               (t
                (let ((last (aref heap (1- L))))
                  (setf (aref heap index) last)
                  (funcall set-index-fn last index)
                  (decf (fill-pointer heap))
                  (if (and (> index 0)
                           (funcall compare-fn last (aref heap (parent index))))
                      (improve-key heap index compare-fn set-index-fn)
                      (heapify heap index compare-fn set-index-fn))))))))
    (funcall (q-set-index-fn q) item +not-in-queue+)
    q)
  