Blame


1 12687dd9 2023-08-04 jrmu ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 12687dd9 2023-08-04 jrmu ;; about the language level of this file in a form that our tools can easily process.
3 12687dd9 2023-08-04 jrmu #reader(lib "htdp-intermediate-reader.ss" "lang")((modname 21.2.1) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu (local ((define (f x) x))
5 12687dd9 2023-08-04 jrmu (build-list 4 f))
6 12687dd9 2023-08-04 jrmu
7 12687dd9 2023-08-04 jrmu (local ((define (f x) (+ 1 x)))
8 12687dd9 2023-08-04 jrmu (build-list 4 f))
9 12687dd9 2023-08-04 jrmu
10 12687dd9 2023-08-04 jrmu (local ((define (f x)
11 12687dd9 2023-08-04 jrmu (expt 10 (* -1
12 12687dd9 2023-08-04 jrmu (+ x 1)))))
13 12687dd9 2023-08-04 jrmu (build-list 4 f))
14 12687dd9 2023-08-04 jrmu
15 12687dd9 2023-08-04 jrmu ;evens : N [>=0] -> (listof N [>=0])
16 12687dd9 2023-08-04 jrmu ;Given n, evens creates a list of the first n even numbers.
17 12687dd9 2023-08-04 jrmu
18 12687dd9 2023-08-04 jrmu (define (evens n)
19 12687dd9 2023-08-04 jrmu (local ((define (evens n)
20 12687dd9 2023-08-04 jrmu (build-list n f))
21 12687dd9 2023-08-04 jrmu (define (f n)
22 12687dd9 2023-08-04 jrmu (* 2
23 12687dd9 2023-08-04 jrmu (+ 1 n))))
24 12687dd9 2023-08-04 jrmu (evens n)))
25 12687dd9 2023-08-04 jrmu
26 12687dd9 2023-08-04 jrmu #|
27 12687dd9 2023-08-04 jrmu
28 12687dd9 2023-08-04 jrmu (define (tabulate op n)
29 12687dd9 2023-08-04 jrmu (cond
30 12687dd9 2023-08-04 jrmu [(= n 0) (list (op 0))]
31 12687dd9 2023-08-04 jrmu [else (cons (op n)
32 12687dd9 2023-08-04 jrmu (tabulate op (sub1 n)))]))
33 12687dd9 2023-08-04 jrmu
34 12687dd9 2023-08-04 jrmu |#
35 12687dd9 2023-08-04 jrmu
36 12687dd9 2023-08-04 jrmu ;tabulate : (number -> X) number -> (listof X)
37 12687dd9 2023-08-04 jrmu ;Given op and n, tabulate a list of (f x) from x = n to x = 0.
38 12687dd9 2023-08-04 jrmu
39 12687dd9 2023-08-04 jrmu (define (tabulate op n)
40 12687dd9 2023-08-04 jrmu (reverse (build-list (+ n 1) op)))
41 12687dd9 2023-08-04 jrmu
42 12687dd9 2023-08-04 jrmu ;diagonal : N [>=0] -> (listof (listof number))
43 12687dd9 2023-08-04 jrmu ;Creates a list of list of numbers representing a square identity matrix of width and height n with 1's where the row index equals the column index and 0's elsewhere. Do this by building a list of length n with 1 in the n-th position and 0's elsewhere. Then, append this list to the previously formed diagonal with a column of 0's appended to it.
44 12687dd9 2023-08-04 jrmu
45 12687dd9 2023-08-04 jrmu ;first-row : N [>=0] -> (listof number)
46 12687dd9 2023-08-04 jrmu ;Given n, create the first row of the n-by-n identity matrix.
47 12687dd9 2023-08-04 jrmu
48 12687dd9 2023-08-04 jrmu ;add-col-zero : (listof (listof number)) -> (listof (listof number))
49 12687dd9 2023-08-04 jrmu ;Given a-diag, add a new column of zeros to the left side of a-diag.
50 12687dd9 2023-08-04 jrmu
51 12687dd9 2023-08-04 jrmu (define (diagonal n)
52 12687dd9 2023-08-04 jrmu (local ((define (diagonal n)
53 12687dd9 2023-08-04 jrmu (cond
54 12687dd9 2023-08-04 jrmu [(zero? n) empty]
55 12687dd9 2023-08-04 jrmu [else (append (list (build-list n first-row))
56 12687dd9 2023-08-04 jrmu (add-col-zero (diagonal (sub1 n))))]))
57 12687dd9 2023-08-04 jrmu (define (first-row n)
58 12687dd9 2023-08-04 jrmu (cond
59 12687dd9 2023-08-04 jrmu [(= n 0) 1]
60 12687dd9 2023-08-04 jrmu [else 0]))
61 12687dd9 2023-08-04 jrmu (define (add-col-zero a-diag)
62 12687dd9 2023-08-04 jrmu (cond
63 12687dd9 2023-08-04 jrmu [(empty? a-diag) empty]
64 12687dd9 2023-08-04 jrmu [else (cons (cons 0 (first a-diag))
65 12687dd9 2023-08-04 jrmu (add-col-zero (rest a-diag)))])))
66 12687dd9 2023-08-04 jrmu (diagonal n)))
67 12687dd9 2023-08-04 jrmu
68 12687dd9 2023-08-04 jrmu #|
69 12687dd9 2023-08-04 jrmu
70 12687dd9 2023-08-04 jrmu ;f : N[>=0] N[>=0] -> (listof number)
71 12687dd9 2023-08-04 jrmu ;Creates a (listof number) with length l with 1 at the n-th position (the first position has an index of zero) and 0's elsewhere.
72 12687dd9 2023-08-04 jrmu
73 12687dd9 2023-08-04 jrmu (define (f n l)
74 12687dd9 2023-08-04 jrmu (cond
75 12687dd9 2023-08-04 jrmu [(zero? l) empty]
76 12687dd9 2023-08-04 jrmu [else ... (sub1 l) ...]))
77 12687dd9 2023-08-04 jrmu
78 12687dd9 2023-08-04 jrmu
79 12687dd9 2023-08-04 jrmu (list
80 12687dd9 2023-08-04 jrmu (list 1 0 0)
81 12687dd9 2023-08-04 jrmu (list 0 1 0)
82 12687dd9 2023-08-04 jrmu (list 0 0 1)))
83 12687dd9 2023-08-04 jrmu
84 12687dd9 2023-08-04 jrmu
85 12687dd9 2023-08-04 jrmu (list
86 12687dd9 2023-08-04 jrmu (list 1 0)
87 12687dd9 2023-08-04 jrmu (list 0 1)))
88 12687dd9 2023-08-04 jrmu
89 12687dd9 2023-08-04 jrmu |#
90 12687dd9 2023-08-04 jrmu
91 12687dd9 2023-08-04 jrmu #|
92 12687dd9 2023-08-04 jrmu Exercise 21.2.1. Use build-list
93 12687dd9 2023-08-04 jrmu
94 12687dd9 2023-08-04 jrmu to define tabulate from exercise 21.1.1; and
95 12687dd9 2023-08-04 jrmu
96 12687dd9 2023-08-04 jrmu to define diagonal, which consumes a natural number n and creates a list of lists of 0 and 1.
97 12687dd9 2023-08-04 jrmu Example:
98 12687dd9 2023-08-04 jrmu
99 12687dd9 2023-08-04 jrmu (equal? (diagonal 3)
100 12687dd9 2023-08-04 jrmu (list
101 12687dd9 2023-08-04 jrmu (list 1 0 0)
102 12687dd9 2023-08-04 jrmu (list 0 1 0)
103 12687dd9 2023-08-04 jrmu (list 0 0 1)))
104 12687dd9 2023-08-04 jrmu Use local if function definitions require auxiliary functions. Solution
105 12687dd9 2023-08-04 jrmu
106 12687dd9 2023-08-04 jrmu ;; build-list : N (N -> X) -> (listof X)
107 12687dd9 2023-08-04 jrmu ;; to construct (list (f 0) ... (f (- n 1)))
108 12687dd9 2023-08-04 jrmu (define (build-list n f) ...)
109 12687dd9 2023-08-04 jrmu
110 12687dd9 2023-08-04 jrmu |#