(defun qsort (li &optional (compare #'>)) (cond ((endp list) nil) (t (let* ((pivot (first li)) (comp (lambda (x) (funcall compare pivot x))) (left (remove-if comp (rest li))) (right (remove-if-not comp (rest li)))) (append (qsort left compare) (cons pivot (qsort right compare)))))))