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
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?
ResponderBorrar(Lo siento que no tiene nada que ver con Common Lisp exactamente. Perdóname el Español malo. :-)
si
BorrarOla, en Common Lisp hay COUNT-IF:
ResponderBorrar(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))
Si, se que existen muchas funciones, solo las implemento como ejercicio.
Borrar