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))