lunes, 18 de diciembre de 2023

Contar valores que cumplan un criterio en Lisp

 


Función para contar valores de una lista en lisp según un criterio (que va a ser una función) : 

(defun contarSegun (lista fx) 

 (cond

     ((null lista) 0)

     ((funcall fx (first lista)) 

           (+ (contarSegun (rest lista) fx) 1))

     (T (contarSegun (rest lista) fx))

 )

)


Y vamos a probarla : 


> (contarSegun '(1 2 3 4 5 6) (lambda (a) (> a 3)))

3


> (contarSegun '(1 2 3 4 5 6) (lambda (a) (>= a 3)))

4


> (contarSegun '(1 2 3 4 5 6) (lambda (a) (= a 3)))

1


4 comentarios:

  1. Puedo preguntarte algo sobre Español? Veo que has nombrado la función "contarSegun"..... ¿Como se decide nombrarla "contarSegun" y no "cuentaSegun"? ¿Ambos funcionaría bien?

    (Lo siento que no tiene nada que ver con Common Lisp exactamente. Perdóname el Español malo. :-)

    ResponderBorrar
  2. Ola, en Common Lisp hay COUNT-IF:

    (count-if (lambda (it) (> it 3)) '(1 2 3 4 5 6))

    puede se user con la referencia de una función:

    (count-if #'plusp '(-1 0 1 2 3))

    ResponderBorrar
    Respuestas
    1. Si, se que existen muchas funciones, solo las implemento como ejercicio.

      Borrar