木構造の葉の数を数えるcount-leavesってのが前にあったんですけど、それをaccumulate使って書き直せだって。
accumulateの人気に嫉妬。
accumulateは超人気者です。抽象度が高いと人気者になれる。
(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence)))))
mapも人気者。とてもかわいい。
(define (map p sequence) (accumulate (lambda (x y) (cons (p x) y)) () sequence))
count-leavesはあんましキレイな気がしません。
かわいそうですけど、しょうがないですね。
(define (count-leaves t) (accumulate + 0 (map (lambda (x) (if (pair? x) (count-leaves x) 1)) t)))