March 26, 2008
(define (rev a)
 (if (list? a) (reverse (map rev a))
   a)) (define (flatten a)
 (if (list? a) (apply append (map flatten a))
   (list a))) (define (for-each-tree f g a)
 (let self ((a a))
  (if (list? a) (apply g (map self a))
    (f a))))
(define (sum tree) (for-each-tree + + tree))
(define (map-tree f tree) (for-each-tree f list tree))