| p | predicate |
|---|---|
| a | source list |
(filter number? '(a 1 b 2 c 3)) => (1 2 3)
(define (filter p a)
(letrec
((filter2
(lambda (a r)
(cond
((null? a) r)
((p (car a)) (filter2 (cdr a) (cons (car a) r)))
(else (filter2 (cdr a) r))))))
(filter2 (reverse a) '())))