anchor.diff:  it as an estimate of the NN distance) because M
   contains an object O’ which is nearer to P (theorem
   2). This is also used in downward pruning."
  +
  +  ;; ????
  +  ;; does it mean there are raw objects in abl ?
     )
     
   (defun prune-upward (node point nearest abl)
  -  "every MBR M with MINDIST(P,M) greater than
  +  "(3.1) 3. every MBR M with MINDIST(P,M) greater than
   the actual distance from P to a given object O is
   discarded because it cannot enclose an object nearer
  -than O (theorem 1). We use this in upward pruning."
  -  )+than O (theorem 1). We use this in upward pruning.
  +
  + (3.2) we take this new estimate of the NN and
  +apply pruning strategy 3 to remove all branches with
  +M1ND1S7’(P, M) > Nearest for all MBRs M in the
  +ABL."
  +  (declare (ignorable node point))
  +  (match nearest
  +    ((nearest-element (object _) (dist nearest-dist))
  +     (remove-if (lambda (node)
  +                  (< nearest-dist (abl-mindist node)))
  +                abl))))
positive.code: ;; Originally, our guess for
  ;; the nearest neighbor distance (call it Nearest) is infinity.
  
  (defvar *tree*)
  (defun nearest-neighbor-search (point *tree* distance-function)
    "point (list numbers*): a list in the same form as lows and highs.
  
negative.code: 
       ;; We then apply pruning strategies 1 and 2 to the ABL to
       ;; remove unnecessary branches.
       (iter (with last = (prune-downward-1
                           node point nearest
                           (sort (mapcar (lambda (child)
                                           (let ((mbr (mbr child *tree*)))
                                             (abl-element child
                                                          (mindist point mbr)
                                                          (minimax-dist point mbr))))
                                         children) #'<
                                 :key #'abl-mindist)))
  
  