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)
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)]))
13 12687dd9 2023-08-04 jrmu (define-struct ir (name price))
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.
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.
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.
27 12687dd9 2023-08-04 jrmu (define (below-ir1 n a-loir)
28 12687dd9 2023-08-04 jrmu (filter1 <ir a-loir n))
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.
33 12687dd9 2023-08-04 jrmu (define (<ir an-ir n)
34 12687dd9 2023-08-04 jrmu (< (ir-price an-ir) n))
37 12687dd9 2023-08-04 jrmu ;(below-ir1 10 (list (make-ir 'doll 8) (make-ir 'robot 12)))
39 12687dd9 2023-08-04 jrmu #| Hand Evaluation
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)
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)])
49 12687dd9 2023-08-04 jrmu (<ir (first (make-ir 'doll 8)) 10)
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)])
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))
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)])
68 12687dd9 2023-08-04 jrmu (cons (make-ir 'doll 8)
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.
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)))
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.
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))
85 12687dd9 2023-08-04 jrmu (find 'doll (list (make-ir 'doll 8) (make-ir 'robot 12) (make-ir 'doll 13)))
87 12687dd9 2023-08-04 jrmu (cons? (filter1 eq-ir? (list (make-ir 'doll 8) (make-ir 'robot 12) (make-ir 'doll 13)) 'doll))
89 12687dd9 2023-08-04 jrmu (filter1 eq-ir? (list (make-ir 'doll 8) (make-ir 'robot 12) (make-ir 'doll 13)) 'doll)
91 12687dd9 2023-08-04 jrmu (cons? (cons (first a-lon)
92 12687dd9 2023-08-04 jrmu (filter1 eq-ir? (rest a-lon) t)))