(define (flat tree)
(if (list? tree) (apply append (map flat tree))
(list tree)))

(define (sum tree)
(if (list? tree) (apply + (map sum tree))
tree))

(define (map-tree f tree)
(if (list? tree) (map (lambda (tree) (map-tree f tree)) tree)
(f tree)))
apply はちょっと邪道かな。でも便利だし