CL-USER 8 > (reduce
or
CL-USER 9 > (loop for e in '((1) (-1) (3)) minimize (first e)) -1
I am afraid the container element is more complicated:
CL-USER 9 > (defun minimum (list predicate key) (when list (let* ((m0 (first list)) (m1 (funcall key m0))) (mapc (lambda (e0 &aux (e1 (funcall key e0))) (when (funcall predicate e1 m1) (psetf m0 e0 m1 e1))) list) m0))) MINIMUM CL-USER 10 > (minimum '((a 1) (b -1) (c -2)) #'<
source share