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 19.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 ;filter1 : predicate list-of-numbers
5 12687dd9 2023-08-04 jrmu ;Filters out all numbers in a-lon where the predicate of the number evaluates to false. Retains all numbers that evaluate to true.
6 12687dd9 2023-08-04 jrmu (define (filter1 predicate a-lon t)
7 12687dd9 2023-08-04 jrmu (cond
8 12687dd9 2023-08-04 jrmu [(empty? a-lon) empty]
9 12687dd9 2023-08-04 jrmu [(predicate (first a-lon) t) (cons (first a-lon)
10 12687dd9 2023-08-04 jrmu (filter1 predicate (rest a-lon) t))]
11 12687dd9 2023-08-04 jrmu [else (filter1 predicate (rest a-lon) t)]))
12 12687dd9 2023-08-04 jrmu
13 12687dd9 2023-08-04 jrmu (define-struct ir (name price))
14 12687dd9 2023-08-04 jrmu
15 12687dd9 2023-08-04 jrmu ;An inventory-record (ir) is a structure
16 12687dd9 2023-08-04 jrmu ;(make-ir n p)
17 12687dd9 2023-08-04 jrmu ;where n is a symbol and p is a number.
18 12687dd9 2023-08-04 jrmu
19 12687dd9 2023-08-04 jrmu ;An inventory is either
20 12687dd9 2023-08-04 jrmu ;1. empty or
21 12687dd9 2023-08-04 jrmu ;2. (cons ir inv)
22 12687dd9 2023-08-04 jrmu ;where ir is an inventory record and inv is an inventory.
23 12687dd9 2023-08-04 jrmu
24 12687dd9 2023-08-04 jrmu ;below-ir1 : number list-of-ir -> list-of-ir
25 12687dd9 2023-08-04 jrmu ;Given n and a-loir, return a new list-of-ir with inventory records with prices below n.
26 12687dd9 2023-08-04 jrmu
27 12687dd9 2023-08-04 jrmu (define (below-ir1 n a-loir)
28 12687dd9 2023-08-04 jrmu (filter1 <ir a-loir n))
29 12687dd9 2023-08-04 jrmu
30 12687dd9 2023-08-04 jrmu ;<ir : ir n -> boolean
31 12687dd9 2023-08-04 jrmu ;Given an-ir and n, determine if the price of the ir is less than n.
32 12687dd9 2023-08-04 jrmu
33 12687dd9 2023-08-04 jrmu (define (<ir an-ir n)
34 12687dd9 2023-08-04 jrmu (< (ir-price an-ir) n))
35 12687dd9 2023-08-04 jrmu
36 12687dd9 2023-08-04 jrmu ;Test Case
37 12687dd9 2023-08-04 jrmu ;(below-ir1 10 (list (make-ir 'doll 8) (make-ir 'robot 12)))
38 12687dd9 2023-08-04 jrmu
39 12687dd9 2023-08-04 jrmu #| Hand Evaluation
40 12687dd9 2023-08-04 jrmu
41 12687dd9 2023-08-04 jrmu (below-ir1 10 (list (make-ir 'doll 8) (make-ir 'robot 12)))
42 12687dd9 2023-08-04 jrmu (filter1 <ir (list (make-ir 'doll 8) (make-ir 'robot 12)) 10)
43 12687dd9 2023-08-04 jrmu (cond
44 12687dd9 2023-08-04 jrmu [false empty]
45 12687dd9 2023-08-04 jrmu [(<ir (first (make-ir 'doll 8)) 10) (cons (first (list (make-ir 'doll 8) (make-ir 'robot 12)))
46 12687dd9 2023-08-04 jrmu (filter1 predicate (rest (list (make-ir 'doll 8) (make-ir 'robot 12))) 10))]
47 12687dd9 2023-08-04 jrmu [else (filter1 predicate (rest (list (make-ir 'doll 8) (make-ir 'robot 12))) 10)])
48 12687dd9 2023-08-04 jrmu
49 12687dd9 2023-08-04 jrmu (<ir (first (make-ir 'doll 8)) 10)
50 12687dd9 2023-08-04 jrmu (< 8 10)
51 12687dd9 2023-08-04 jrmu true
52 12687dd9 2023-08-04 jrmu
53 12687dd9 2023-08-04 jrmu (cond
54 12687dd9 2023-08-04 jrmu [false empty]
55 12687dd9 2023-08-04 jrmu [true (cons (make-ir 'doll 8)
56 12687dd9 2023-08-04 jrmu (filter1 <ir (list (make-ir 'robot 12)) 10))]
57 12687dd9 2023-08-04 jrmu [else (filter1 <ir (rest (list (make-ir 'doll 8) (make-ir 'robot 12))) 10)])
58 12687dd9 2023-08-04 jrmu
59 12687dd9 2023-08-04 jrmu (cons (make-ir 'doll 8)
60 12687dd9 2023-08-04 jrmu (filter1 <ir (list (make-ir 'robot 12)) 10))
61 12687dd9 2023-08-04 jrmu
62 12687dd9 2023-08-04 jrmu (cond
63 12687dd9 2023-08-04 jrmu [false empty]
64 12687dd9 2023-08-04 jrmu [false (cons (first a-lon)
65 12687dd9 2023-08-04 jrmu (filter1 predicate (rest a-lon) t))]
66 12687dd9 2023-08-04 jrmu [else (filter1 <ir (empty) 10)])
67 12687dd9 2023-08-04 jrmu
68 12687dd9 2023-08-04 jrmu (cons (make-ir 'doll 8)
69 12687dd9 2023-08-04 jrmu empty)
70 12687dd9 2023-08-04 jrmu
71 12687dd9 2023-08-04 jrmu |#
72 12687dd9 2023-08-04 jrmu
73 12687dd9 2023-08-04 jrmu ;find : list-of-ir symbol -> boolean
74 12687dd9 2023-08-04 jrmu ;Determine if a-loir contains an ir with the name a-symbol.
75 12687dd9 2023-08-04 jrmu
76 12687dd9 2023-08-04 jrmu (define (find a-symbol a-loir)
77 12687dd9 2023-08-04 jrmu (cons? (filter1 eq-ir? a-loir a-symbol)))
78 12687dd9 2023-08-04 jrmu
79 12687dd9 2023-08-04 jrmu ;eq-ir? : ir a-symbol
80 12687dd9 2023-08-04 jrmu ;Determine if an-ir has a-symbol for its name.
81 12687dd9 2023-08-04 jrmu
82 12687dd9 2023-08-04 jrmu (define (eq-ir? an-ir a-symbol)
83 12687dd9 2023-08-04 jrmu (symbol=? (ir-name an-ir) a-symbol))
84 12687dd9 2023-08-04 jrmu
85 12687dd9 2023-08-04 jrmu (find 'doll (list (make-ir 'doll 8) (make-ir 'robot 12) (make-ir 'doll 13)))
86 12687dd9 2023-08-04 jrmu
87 12687dd9 2023-08-04 jrmu (cons? (filter1 eq-ir? (list (make-ir 'doll 8) (make-ir 'robot 12) (make-ir 'doll 13)) 'doll))
88 12687dd9 2023-08-04 jrmu
89 12687dd9 2023-08-04 jrmu (filter1 eq-ir? (list (make-ir 'doll 8) (make-ir 'robot 12) (make-ir 'doll 13)) 'doll)
90 12687dd9 2023-08-04 jrmu
91 12687dd9 2023-08-04 jrmu (cons? (cons (first a-lon)
92 12687dd9 2023-08-04 jrmu (filter1 eq-ir? (rest a-lon) t)))
93 12687dd9 2023-08-04 jrmu
94 12687dd9 2023-08-04 jrmu true