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)
>