1 665c255d 2023-08-04 jrmu (define (test-case actual expected)
3 665c255d 2023-08-04 jrmu (display "Actual: ")
4 665c255d 2023-08-04 jrmu (display actual)
6 665c255d 2023-08-04 jrmu (display "Expected: ")
7 665c255d 2023-08-04 jrmu (display expected)
10 665c255d 2023-08-04 jrmu (define (scale-tree tree factor)
11 665c255d 2023-08-04 jrmu (cond ((null? tree) '())
12 665c255d 2023-08-04 jrmu ((not (pair? tree)) (* factor tree))
13 665c255d 2023-08-04 jrmu (else (cons (scale-tree (car tree) factor)
14 665c255d 2023-08-04 jrmu (scale-tree (cdr tree) factor)))))
16 665c255d 2023-08-04 jrmu (define (scale-tree tree factor)
17 665c255d 2023-08-04 jrmu (map (lambda (sub-tree)
18 665c255d 2023-08-04 jrmu (if (pair? sub-tree)
19 665c255d 2023-08-04 jrmu (scale-tree sub-tree factor)
20 665c255d 2023-08-04 jrmu (* factor sub-tree)))
23 665c255d 2023-08-04 jrmu (define (square-tree tree)
24 665c255d 2023-08-04 jrmu (cond ((null? tree) '())
25 665c255d 2023-08-04 jrmu ((not (pair? tree)) (* tree tree))
26 665c255d 2023-08-04 jrmu (else (cons (square-tree (car tree))
27 665c255d 2023-08-04 jrmu (square-tree (cdr tree))))))
29 665c255d 2023-08-04 jrmu ;; (test-case (square-tree
31 665c255d 2023-08-04 jrmu ;; (list 2 (list 3 4) 5)
32 665c255d 2023-08-04 jrmu ;; (list 6 7)))
33 665c255d 2023-08-04 jrmu ;; '(1 (4 (9 16) 25) (36 49)))
35 665c255d 2023-08-04 jrmu ;; (define (square-tree-map tree)
36 665c255d 2023-08-04 jrmu ;; (map (lambda (sub-tree)
37 665c255d 2023-08-04 jrmu ;; (if (pair? sub-tree)
38 665c255d 2023-08-04 jrmu ;; (square-tree-map sub-tree)
39 665c255d 2023-08-04 jrmu ;; (* sub-tree sub-tree)))
42 665c255d 2023-08-04 jrmu ;; (test-case (square-tree-map
44 665c255d 2023-08-04 jrmu ;; (list 2 (list 3 4) 5)
45 665c255d 2023-08-04 jrmu ;; (list 6 7)))
46 665c255d 2023-08-04 jrmu ;; '(1 (4 (9 16) 25) (36 49)))
48 665c255d 2023-08-04 jrmu ;; Exercise 2.31. Abstract your answer to exercise 2.30 to produce a procedure tree-map with the property that square-tree could be defined as
50 665c255d 2023-08-04 jrmu (define (tree-map proc tree)
51 665c255d 2023-08-04 jrmu (cond ((null? tree) '())
52 665c255d 2023-08-04 jrmu ((not (pair? tree)) (proc tree))
53 665c255d 2023-08-04 jrmu (else (cons (tree-map proc (car tree))
54 665c255d 2023-08-04 jrmu (tree-map proc (cdr tree))))))
56 665c255d 2023-08-04 jrmu (define (square-tree-map tree) (tree-map square tree))
58 665c255d 2023-08-04 jrmu (test-case (square-tree-map
60 665c255d 2023-08-04 jrmu (list 2 (list 3 4) 5)
61 665c255d 2023-08-04 jrmu (list 6 7)))
62 665c255d 2023-08-04 jrmu '(1 (4 (9 16) 25) (36 49)))
65 665c255d 2023-08-04 jrmu ;; Exercise 2.32. We can represent a set as a list of distinct elements, and we can represent the set of all subsets of the set as a list of lists. For example, if the set is (1 2 3), then the set of all subsets is (() (3) (2) (2 3) (1) (1 3) (1 2) (1 2 3)). Complete the following definition of a procedure that generates the set of subsets of a set and give a clear explanation of why it works:
67 665c255d 2023-08-04 jrmu (define (subsets s)
68 665c255d 2023-08-04 jrmu (if (null? s)
70 665c255d 2023-08-04 jrmu (let ((rest (subsets (cdr s))))
71 665c255d 2023-08-04 jrmu (append rest (map <??> rest)))))