From 32fd86edcbd2216859a2cb8258b6b0a93014fc8a Mon Sep 17 00:00:00 2001 From: Oliver Payne Date: Fri, 29 Oct 2021 22:24:36 +0100 Subject: [PATCH] Completed 2.38 --- 2_38.sch | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 2_38.sch 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))