Resposta ao exercício 40

(defun filtra (pred lista)
  (cond ((null lista) nil)
        ((funcall pred (first lista))
         (cons (first lista) (filtra pred lista)))
        (t (filtra pred (rest lista)))))

> (filtra (function par?) (enumera 1 20)) (2 4 6 8 10 12 14 16 18 20)

Esta função já existe em Lisp e denomina-se remove-if-not.