問題2.35 – SICP(計算機プログラムの構造と解釈)その49

問題2.35

(map <??> <??>) 部分でリストの葉の数を数える。(葉の数を表す数のリストを返す)
そのリストの各値を足す。

(define (count-leaves t)
  (accumulate + 0 (map (lambda (x) (cond ((null? x) 0)
                                         ((not (pair? x)) 1)
                                         (else (count-leaves x)))) t)))

(define y (cons (list 1 2) (list 3 4)))
; ((1 2) 3 4)
(count-leaves y)
gosh> 4
(count-leaves (list y y))
gosh> 8

accumualte 手続き

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (accumulate op initial (cdr sequence)))))
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»