Blob


1 (define (test-case actual expected)
2 (newline)
3 (display "Actual: ")
4 (display actual)
5 (newline)
6 (display "Expected: ")
7 (display expected)
8 (newline))
10 (define (scale-tree tree factor)
11 (cond ((null? tree) '())
12 ((not (pair? tree)) (* factor tree))
13 (else (cons (scale-tree (car tree) factor)
14 (scale-tree (cdr tree) factor)))))
16 (define (scale-tree tree factor)
17 (map (lambda (sub-tree)
18 (if (pair? sub-tree)
19 (scale-tree sub-tree factor)
20 (* factor sub-tree)))
21 tree))
23 ;; Exercise 2.30. Define a procedure square-tree analogous to the square-list procedure of exercise 2.21. That is, square-list should behave as follows:
25 (define (square-tree tree)
26 (cond ((null? tree) '())
27 ((not (pair? tree)) (* tree tree))
28 (else (cons (square-tree (car tree))
29 (square-tree (cdr tree))))))
31 (test-case (square-tree
32 (list 1
33 (list 2 (list 3 4) 5)
34 (list 6 7)))
35 '(1 (4 (9 16) 25) (36 49)))
37 ;; Define square-tree both directly (i.e., without using any higher-order procedures) and also by using map and recursion.
39 (define (square-tree-map tree)
40 (map (lambda (sub-tree)
41 (if (pair? sub-tree)
42 (square-tree-map sub-tree)
43 (* sub-tree sub-tree)))
44 tree))
46 (test-case (square-tree-map
47 (list 1
48 (list 2 (list 3 4) 5)
49 (list 6 7)))
50 '(1 (4 (9 16) 25) (36 49)))