問題 2.33
(define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define (map p sequence) (define (square x) (* x x)) (accumulate (lambda (x y) (cons (p x) y)) null sequence)) (define (append seq1 seq2) (accumulate cons seq2 seq1)) (define (length sequence) (accumulate (lambda (x y) (+ y 1)) 0 sequence)) (map square (list 1 2 3 4 5 6)) ;-> (1 4 9 16 25 36) (append (list 1 2 3) (list 4 5 6)) ;-> (1 2 3 4 5 6) (length (list 1 2 3 4 5 6)) ;-> 6