sicp/2_35.sch

20 lines
488 B
Scheme

;(define (count-leaves x)
; (cond ((null? x) 0)
; ((not (pair? x)) 1)
; (else (+ (count-leaves (car x))
; (count-leaves (cdr x))))))
(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
(define (count-leaves x)
(accumulate + 0 (map (lambda (y)
(if (not (pair? y))
1
(+ (count-leaves (car y))
(count-leaves (cdr y))))) x)))