Blame


1 665c255d 2023-08-04 jrmu (define (test-case actual expected)
2 665c255d 2023-08-04 jrmu (newline)
3 665c255d 2023-08-04 jrmu (display "Actual: ")
4 665c255d 2023-08-04 jrmu (display actual)
5 665c255d 2023-08-04 jrmu (newline)
6 665c255d 2023-08-04 jrmu (display "Expected: ")
7 665c255d 2023-08-04 jrmu (display expected)
8 665c255d 2023-08-04 jrmu (newline))
9 665c255d 2023-08-04 jrmu
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)))))
15 665c255d 2023-08-04 jrmu
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)))
21 665c255d 2023-08-04 jrmu tree))
22 665c255d 2023-08-04 jrmu
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))))))
28 665c255d 2023-08-04 jrmu
29 665c255d 2023-08-04 jrmu ;; (test-case (square-tree
30 665c255d 2023-08-04 jrmu ;; (list 1
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)))
34 665c255d 2023-08-04 jrmu
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)))
40 665c255d 2023-08-04 jrmu ;; tree))
41 665c255d 2023-08-04 jrmu
42 665c255d 2023-08-04 jrmu ;; (test-case (square-tree-map
43 665c255d 2023-08-04 jrmu ;; (list 1
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)))
47 665c255d 2023-08-04 jrmu
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
49 665c255d 2023-08-04 jrmu
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))))))
55 665c255d 2023-08-04 jrmu
56 665c255d 2023-08-04 jrmu (define (square-tree-map tree) (tree-map square tree))
57 665c255d 2023-08-04 jrmu
58 665c255d 2023-08-04 jrmu (test-case (square-tree-map
59 665c255d 2023-08-04 jrmu (list 1
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)))
63 665c255d 2023-08-04 jrmu
64 665c255d 2023-08-04 jrmu
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:
66 665c255d 2023-08-04 jrmu
67 665c255d 2023-08-04 jrmu (define (subsets s)
68 665c255d 2023-08-04 jrmu (if (null? s)
69 665c255d 2023-08-04 jrmu (list nil)
70 665c255d 2023-08-04 jrmu (let ((rest (subsets (cdr s))))
71 665c255d 2023-08-04 jrmu (append rest (map <??> rest)))))