(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
(define fold-right accumulate)
(define (fold-left op initial sequence)
(define (iter result rest)
(if (null? rest)
result
(iter (op result (car rest))
(cdr rest))))
(iter initial sequence))
(define (append seq1 seq2)
(accumulate cons seq2 seq1))
(define (reverse sequence)
(fold-right (lambda (x y) (append y (list x))) null sequence))
(reverse (list 1 2 3 4 5 6))
(define (reverse sequence)
(fold-left (lambda (x y) (cons y x)) null sequence))
(reverse (list 1 2 3 4 5 6))