Tri par sélection en Lisp

Trier les éléments d'un tableau

(defun selection-sort (vector less)
  (loop with length = (length vector)
        for k from 0 below (1- length)
        do (loop with min-index = k
                 for i from (1+ k) below length
                 do (when (funcall less (aref vector i) (aref vector min-index))
                      (setf min-index i))
                 finally (rotatef (aref vector k) (aref vector min-index)))))

Trier de manière destructive les éléments d'une liste

(defun selection-sort-list (list less)
  (loop for k on list
        do (loop with min-cell = k
                 for i on (cdr k)
                 do (when (funcall less (car i) (car min-cell))
                      (setf min-cell i))
                 finally (rotatef (car k) (car min-cell)))
        until (null (cdr k))))