SICP問題2.33

信号処理構造のメモ。
enumerator(入力データの数え上げ) => filter(必要以外の要素の除去) => map(写像(変換器)) => accumulator(積算・組合せ)
accumulationの定義は以下のとおり

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
      (accumulate op initial (cdr sequence)))))

で、問題。map, append, lengthをaccumulateを使って書き直す。
map

(define (map p sequence)
  (accumulate (lambda (x y) (cons (p x) y)) () sequence))

append

(define (append seq1 seq2)
  (accumulate cons seq2 seq1))

length

(define (length sequence)
  (accumulate (lambda (x y) (+ 1 y)) 0 sequence))