Partitionnement d'un tableau en Lisp

(defun partition (vector pivot min max less)
    (loop until (> min max)
          do (loop until (or (> min max)
                             (funcall less pivot (aref vector min)))
                   do (incf min))
             (loop until (or (> min max)
                             (funcall less (aref vector max) pivot))
                   do (decf max))
             (unless (> min max)
               (rotatef (aref vector min) (aref vector max))
               (incf min)
               (decf max)))
    min)