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-beginner-reader.ss" "lang")((modname 11.3.5) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "arrow.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu ;;Produces an intenger between n and m-1
6 12687dd9 2023-08-04 jrmu ;; random-n-m : integer integer -> integer
8 12687dd9 2023-08-04 jrmu ;; Assume: n < m
9 12687dd9 2023-08-04 jrmu (define (random-n-m n m)
10 12687dd9 2023-08-04 jrmu (+ (random (- m n)) n))
12 12687dd9 2023-08-04 jrmu ;create-temps : number number number -> list-of-numbers
13 12687dd9 2023-08-04 jrmu ;Creates a list-of-numbers consisting of n numbers between low and high.
15 12687dd9 2023-08-04 jrmu ;(create-temps 0 low high)
17 12687dd9 2023-08-04 jrmu ;(create-temps 1 low high)
18 12687dd9 2023-08-04 jrmu ;(cons (random-n-m low (+ high 1)) empty)
19 12687dd9 2023-08-04 jrmu ;(create-temps 2 low high)
20 12687dd9 2023-08-04 jrmu ;(cons (random-n-m low (+ high 1)) (cons (random-n-m low (+ high 1)) empty))
24 12687dd9 2023-08-04 jrmu ;(define (create-temps n low high)
26 12687dd9 2023-08-04 jrmu ; [(zero? n) ...]
27 12687dd9 2023-08-04 jrmu ; [(>= n 1) ...]
28 12687dd9 2023-08-04 jrmu ; [else (error 'create-temps "expected 1st arg: natural number")]))
30 12687dd9 2023-08-04 jrmu (define (create-temps n low high)
32 12687dd9 2023-08-04 jrmu [(zero? n) empty]
33 12687dd9 2023-08-04 jrmu [(>= n 1) (cons (random-n-m low (+ high 1)) (create-temps (sub1 n) low high))]
34 12687dd9 2023-08-04 jrmu [else (error 'create-temps "expected 1st arg: natural number")]))
36 12687dd9 2023-08-04 jrmu ;Data Definition
37 12687dd9 2023-08-04 jrmu ;A list-of-temperatures is either
38 12687dd9 2023-08-04 jrmu ;1. an empty list or
39 12687dd9 2023-08-04 jrmu ;2. (cons t los) where t is a number and los is a list-of-temperatures.
41 12687dd9 2023-08-04 jrmu ;Header, Purpose, Contract
42 12687dd9 2023-08-04 jrmu ;check-range1? : list-of-temperatures -> boolean
43 12687dd9 2023-08-04 jrmu ;Given a-list, returns true if the list of temperatures are within the range
44 12687dd9 2023-08-04 jrmu ;low and high (endpoints included as true).
46 12687dd9 2023-08-04 jrmu (define (check-range1? a-list low high)
48 12687dd9 2023-08-04 jrmu [(empty? a-list) true]
49 12687dd9 2023-08-04 jrmu [(cons? a-list) (cond
51 12687dd9 2023-08-04 jrmu (number? (first a-list))
52 12687dd9 2023-08-04 jrmu (>= (first a-list) low)
53 12687dd9 2023-08-04 jrmu (<= (first a-list) high))
54 12687dd9 2023-08-04 jrmu (check-range1? (rest a-list) low high)]
55 12687dd9 2023-08-04 jrmu [(number? (first a-list)) false]
57 12687dd9 2023-08-04 jrmu (error 'check-range1? "list should be composed of numbers")])]
58 12687dd9 2023-08-04 jrmu [else (error 'check-range1? "expected 3 arg: list number number")]))
60 12687dd9 2023-08-04 jrmu ;create-prices : natural-number number number -> list-of-numbers
61 12687dd9 2023-08-04 jrmu ;Given a natural-number n, creates a list of n prices
62 12687dd9 2023-08-04 jrmu ;between low and high rounded to the nearest
63 12687dd9 2023-08-04 jrmu ;dime ($0.10). Creates this list by
64 12687dd9 2023-08-04 jrmu ;making the function call random-dime.
67 12687dd9 2023-08-04 jrmu ;(create-prices 0 low high)
69 12687dd9 2023-08-04 jrmu ;(create-prices 1 low high)
70 12687dd9 2023-08-04 jrmu ;(cons (random-dime low high) empty)
71 12687dd9 2023-08-04 jrmu ;(create-prices 2 low high)
72 12687dd9 2023-08-04 jrmu ;(cons (random-dime low high)
73 12687dd9 2023-08-04 jrmu ; (cons (random-dime low high) empty))
75 12687dd9 2023-08-04 jrmu (define (create-prices n low high)
77 12687dd9 2023-08-04 jrmu [(zero? n) empty]
78 12687dd9 2023-08-04 jrmu [(>= n 1) (cons (random-dime low high) (create-prices (sub1 n) low high))]
79 12687dd9 2023-08-04 jrmu [else (error 'create-prices "expected 1st arg: natural-number")]))
81 12687dd9 2023-08-04 jrmu ;random-dime : number number -> number
82 12687dd9 2023-08-04 jrmu ;Given low and high, creates a number (decimal) between low and high
83 12687dd9 2023-08-04 jrmu ;rounded to the nearest dime. It does so by choosing a random integer
84 12687dd9 2023-08-04 jrmu ;between 0 and (high-low)/0.1, inclusive. So for example,
85 12687dd9 2023-08-04 jrmu ;for low=0 and high=1, it chooses a number between 0 and 10 (inclusive).
86 12687dd9 2023-08-04 jrmu ;It then multiplies this number by 0.1, the value of a dime.
87 12687dd9 2023-08-04 jrmu ;This function thus returns us a number between $0.00 and $1.00,
88 12687dd9 2023-08-04 jrmu ;rounded to the nearest dime.
90 12687dd9 2023-08-04 jrmu (define (random-dime low high)
92 12687dd9 2023-08-04 jrmu (random-n-m 0
93 12687dd9 2023-08-04 jrmu (+ (/ (- high low) 0.1) 1))
97 12687dd9 2023-08-04 jrmu ;dollar-store? : list-of-numbers -> boolean
98 12687dd9 2023-08-04 jrmu ;Checks a-list to see if the prices are below 1. Returns true
99 12687dd9 2023-08-04 jrmu ;if the statement is true, false otherwise.
102 12687dd9 2023-08-04 jrmu ;(define (dollar-store? a-list)
104 12687dd9 2023-08-04 jrmu ; [(empty? a-list) ...]
105 12687dd9 2023-08-04 jrmu ; [(cons? a-list) (first a-list) (rest a-list)]))
107 12687dd9 2023-08-04 jrmu (define (dollar-store? a-list)
109 12687dd9 2023-08-04 jrmu [(empty? a-list) true]
110 12687dd9 2023-08-04 jrmu [(cons? a-list) (cond
112 12687dd9 2023-08-04 jrmu (number? (first a-list))
113 12687dd9 2023-08-04 jrmu (< (first a-list) 1))
114 12687dd9 2023-08-04 jrmu (dollar-store? (rest a-list))]
115 12687dd9 2023-08-04 jrmu [else false])]))
117 12687dd9 2023-08-04 jrmu ;eval-until-true : natural-number number number -> boolean
118 12687dd9 2023-08-04 jrmu ;Keep evaluating (dollar-store? (create-prices n low high))
119 12687dd9 2023-08-04 jrmu ;until it returns true.
121 12687dd9 2023-08-04 jrmu (define (eval-until-true n low high)
123 12687dd9 2023-08-04 jrmu [(dollar-store? (create-prices n low high)) true]
124 12687dd9 2023-08-04 jrmu [else (eval-until-true n low high)]))