sábado, 2 de diciembre de 2023

Función para filtrar valores de una lista en lisp


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)



1 comentario:

  1. a ver tambien: "remove-if", "remove-if-not" y otras: https://lispcookbook.github.io/cl-cookbook/data-structures.html

    ResponderBorrar