Chapter 2, Building Abstractions with Data
Section - 2.2 - Hierarchical Data and the Closure Property
Exercise 2.39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#lang sicp
(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))
(define (reverse-r sequence)
(fold-right
(lambda (x y)
(append y (list x))
)
nil
sequence
)
)
(define (reverse-l sequence)
(fold-left
(lambda (x y)
(cons y x)
)
nil
sequence
)
)
Example/Output:
1
2
3
4
5
> (display (reverse-r (list 1 2 3)))
(3 2 1)
> (display (reverse-l (list 1 2 3)))
(3 2 1)
>