; Poda de un árbol aquellos elementos que cumplen una determinada propiedad.
; Paul Graham On Lisp pag.49
(defun prune(test tree)
(labels ((rec(tree acc)
(if (null tree)(nreverse acc)
(rec (cdr tree)
(cond ((consp (car tree))
(cons (rec (car tree) nil) acc))
((funcall test (car tree)) acc) ; se omite
(t (cons (car tree) acc)))))))
(rec tree nil)))
(prune #'evenp '(1 2 3 4 (5 6 7 (8 9 10) 11 12 ) 13 14))
;= (1 3 (5 7 (9) 11) 13)
(prune #'symbolp '( a b c (1 2 3) 4 alfa beta))
;= ((1 2 3) 4)
(prune #'numberp '( a b c (1 2 3) 4 alfa beta))
;= (A B C NIL ALFA BETA)