(define (fold-right op initial sequence) (if (null? sequence) initial (op (car sequence) (fold-right op initial (cdr sequence))))) (define (fold-left op initial sequence) (define (iter result rest) (if (null? rest) result (iter (op result (car rest)) (cdr rest)))) (iter initial sequence)) ; fold-left and fold-right equal if op is commutative (define (reverse-r sequence) (fold-right (lambda (x y) (append y (list x))) '() sequence)) (define (reverse-l sequence) (fold-left (lambda (x y) (append (list y) x)) '() sequence))