Procedures As Arguments
The function (FILTER pred list) removes all elements from list which do not satisfy pred
(define filter
(lambda (pred l)
(cond ((null? l) NIL)
((atom? (car l))
(if (pred (car l))
(cons (car l) (filter pred (cdr l)))))
(else (append (filter pred (car l))
(filter pred (cdr l)))))))