MY-TEST> (flet ((pred (x y) (or (string< (second x) (second y)) (and (string= (second x) (second y)) (< (first x) (first y)))))) (let ((list '((1 "spade") (2 "heart") (3 "spade") (4 "heart") (12 "heart") (6 "heart") (2 "spade")))) (sort (copy-list list) #'pred))) ((2 "heart") (4 "heart") (6 "heart") (12 "heart") (1 "spade") (2 "spade") (3 "spade"))