SICP問題2.39
問題2.18のreverse
(define (reverse x) (define (iter rest result) (if (null? rest) result (iter (cdr rest) (cons (car rest) result))))
をfold-right, fold-leftを使って書き換える。
fold-right版
(define (reverse sequence) (fold-right (lambda (x y) (append y (list x))) () sequence))
fold-left版
(define (reverse sequence) (fold-left (lambda (x y) (cons y x)) () sequence))