anchor.diff:    (heap-extract heap 0 :key key :test test))
   
   (defun heap-extract-all (heap &key (key #'identity) (test #'>=))
  +  (declare (heap heap))
     (loop while (> (length heap) 0)
           collect (heap-extract-maximum heap :key key :test test)))
   
  -(defun make-heap (&optional (size 100))
  +(defsubst make-heap (&optional (size 100))
     (make-array size :adjustable t :fill-pointer 0))
   
   (defun bestn (n seq pred &key (key #'identity) memo)
  
positive.code:     heap))
  
  (defun heap-insert (heap new-item &key (key #'identity) (test #'>=))
    (declare (function key test))
    (fbind (key (ge test))
      (vector-push-extend nil heap)
      (loop for i = (1- (length heap)) then parent-i
  
negative.code:                   (return-from heap-insert i))))
  
  (defun heap-maximum (heap)
    (declare (heap heap))
    (unless (zerop (length heap))
      (aref heap 0)))
  
  (defun heap-extract (heap i &key (key #'identity) (test #'>=))
    (declare (heap heap) (array-index i))
    (unless (> (length heap) i)
      (error "Heap underflow"))
    (prog1
  