Ahora lo que vamos a hacer es buscar el menor o el mayor de una lista. El algoritmo es similar, por lo tanto vamos a utilizar una función general que busque según una función y luego escribimos el mayor o menor pasando un lambda que busque eso (con eso me refiero al menor o al mayor) :
(defun buscar (lista fx)
(cond
((null (rest lista)) (first lista))
((funcall fx (first lista) (buscar (rest lista) fx)) (first lista))
(T (buscar (rest lista) fx))
)
)
(defun menor (lista)
(buscar lista (lambda (a b) (< a b)))
)
(defun mayor (lista)
(buscar lista (lambda (a b) (> a b)))
)
El algoritmo buscar lo que hace es si la lista tiene un solo elemento, ya esta ese es el menor o el mayor. Si no compara el primero con el buscar del resto, por ejemplo para el menor, compara el primero con el menor del resto, si es verdadero ese es el menor y si no el menor es el menor del resto.
Y listo!
Comenten si quieren más algoritmos así.