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