(defun pick-new (lst el) (cons (cons el (when (equal el (caar lst)) (pop lst))) lst)) (defun pack (lst) (reverse (reduce #'pick-new lst :initial-value nil)))