理系学生日記

おまえはいつまで学生気分なのか

問題2-35

木構造の葉の数を数える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)))