Vamos a hacer rápidamente una función que permita filtrar valores de una lista según una función. Veamos el código :
(defun filtrar (lista fx)
(cond
((null lista) lista)
((funcall fx (first lista))
(cons (first lista) (filtrar (rest lista) fx)))
(T (filtrar (rest lista) fx))
)
)
Si la lista esta vacía la retorna, sino se fija si ese elemento cumple el criterio y si lo cumple construye una nueva lista con este elemento y el resto filtrado. Y si no retorna el resto de la lista filtrado.
Veamos si funciona:
> (filtrar '(1 2 3 4 5) (lambda (a) (> a 5)))
NIL
> (filtrar '(1 2 3 4 5) (lambda (a) (> a 2)))
(3 4 5)
> (filtrar '(1 2 3 4 5) (lambda (a) (< a 2)))
(1)