diff --git a/2_38.sch b/2_38.sch new file mode 100644 index 0000000..f48cac1 --- /dev/null +++ b/2_38.sch @@ -0,0 +1,21 @@ +(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))