count-if

Der Aufruf (count-if p l) wertet zu einer Zahl aus, die angibt, auf wie viele Elemente der Liste l das Prädikat p zutraf.

> (count-if number? (quote (ah 2 ce de 5)))
2

> (count-if number? (quote (ah be ce)))
0

> (count-if number? nil)
0


Die Funktion count-if ist durch eine restrekursive innere Funktion realisiert, die auf if, null?, first, rest und + basiert:

(setq count-if
  (letrec
    ((count
      (lambda (p l n)
        (if
          (null? l)
          n
          (if
            (p (first l))
            (count p (rest l) (+ 1 n))
            (count p (rest l) n))))))
    (lambda (p l)
      (count p l 0))))