(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))
(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))