2.35

练习 2.35 将2.2.2节的count-leaves重新定义为一个累积:

(define (count-leaves t)
    (accumulate <??> <??> (map <??> <??>)))

首先,定义 accumulate

 
(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (accumulate op initial (cdr sequence))) 
      )
  )
x
 
#<undef>

然后,再定义 enumerate-tree

 
(define (enumerate-tree tree)
  (cond ((null? tree) '())
        ((not (pair? tree)) (list tree))
        (else (append (enumerate-tree (car tree))
                      (enumerate-tree (cdr tree))))))
 
#<undef>
 
(define (count-leaves t)
  (accumulate + 0 (map (lambda (x) 1) (enumerate-tree t))))
(define x (cons (list 1 2) (list 3 4)))
(count-leaves x)
 
4

results matching ""

    No results matching ""