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-advanced-reader.ss" "lang")((modname |40.1|) (read-case-sensitive #t) (teachpacks ((lib "guess-gui.ss" "teachpack" "htdp") (lib "guess.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp") (lib "draw.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #t #t none #f ((lib "guess-gui.ss" "teachpack" "htdp") (lib "guess.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp") (lib "draw.ss" "teachpack" "htdp")))))
4 12687dd9 2023-08-04 jrmu #|
5 12687dd9 2023-08-04 jrmu Exercise 40.1.3. Show how to implement the following structure definitions as functions:
6 12687dd9 2023-08-04 jrmu
7 12687dd9 2023-08-04 jrmu 1. (define-struct movie (title producer))
8 12687dd9 2023-08-04 jrmu 2. (define-struct boyfriend (name hair eyes phone))
9 12687dd9 2023-08-04 jrmu 3. (define-struct cheerleader (name number))
10 12687dd9 2023-08-04 jrmu 4. (define-struct CD (artist title price))
11 12687dd9 2023-08-04 jrmu 5. (define-struct sweater (material size producer))
12 12687dd9 2023-08-04 jrmu
13 12687dd9 2023-08-04 jrmu Pick one and demonstrate that the expected laws hold. Solution
14 12687dd9 2023-08-04 jrmu |#
15 12687dd9 2023-08-04 jrmu
16 12687dd9 2023-08-04 jrmu (define (make-movie title producer)
17 12687dd9 2023-08-04 jrmu (local ((define title0 title)
18 12687dd9 2023-08-04 jrmu (define producer0 producer)
19 12687dd9 2023-08-04 jrmu (define (service-manager msg)
20 12687dd9 2023-08-04 jrmu (cond
21 12687dd9 2023-08-04 jrmu [(equal? msg 'title) title0]
22 12687dd9 2023-08-04 jrmu [(equal? msg 'producer) producer0])))
23 12687dd9 2023-08-04 jrmu service-manager))
24 12687dd9 2023-08-04 jrmu
25 12687dd9 2023-08-04 jrmu (define (movie-title amovie)
26 12687dd9 2023-08-04 jrmu (amovie 'title))
27 12687dd9 2023-08-04 jrmu
28 12687dd9 2023-08-04 jrmu (define (movie-producer amovie)
29 12687dd9 2023-08-04 jrmu (amovie 'producer))
30 12687dd9 2023-08-04 jrmu
31 12687dd9 2023-08-04 jrmu (define SciFi (make-movie 'StarWars 'GeorgeLucas))
32 12687dd9 2023-08-04 jrmu (movie-title SciFi)
33 12687dd9 2023-08-04 jrmu (movie-producer SciFi)
34 12687dd9 2023-08-04 jrmu
35 12687dd9 2023-08-04 jrmu (define (make-boyfriend name hair eyes phone)
36 12687dd9 2023-08-04 jrmu (lambda (selector)
37 12687dd9 2023-08-04 jrmu (selector name hair eyes phone)))
38 12687dd9 2023-08-04 jrmu (define (boyfriend-name aboyfriend)
39 12687dd9 2023-08-04 jrmu (aboyfriend (lambda (name hair eyes phone) name)))
40 12687dd9 2023-08-04 jrmu (define (boyfriend-hair aboyfriend)
41 12687dd9 2023-08-04 jrmu (aboyfriend (lambda (name hair eyes phone) hair)))
42 12687dd9 2023-08-04 jrmu (define (boyfriend-eyes aboyfriend)
43 12687dd9 2023-08-04 jrmu (aboyfriend (lambda (name hair eyes phone) eyes)))
44 12687dd9 2023-08-04 jrmu (define (boyfriend-phone aboyfriend)
45 12687dd9 2023-08-04 jrmu (aboyfriend (lambda (name hair eyes phone) phone)))
46 12687dd9 2023-08-04 jrmu
47 12687dd9 2023-08-04 jrmu (define Aaron (make-boyfriend 'Aaron 'black 'black 715))
48 12687dd9 2023-08-04 jrmu (boyfriend-name Aaron)
49 12687dd9 2023-08-04 jrmu (boyfriend-hair Aaron)
50 12687dd9 2023-08-04 jrmu (boyfriend-eyes Aaron)
51 12687dd9 2023-08-04 jrmu (boyfriend-phone Aaron)
52 12687dd9 2023-08-04 jrmu
53 12687dd9 2023-08-04 jrmu (define (make-cheerleader name number)
54 12687dd9 2023-08-04 jrmu (lambda (selector)
55 12687dd9 2023-08-04 jrmu (selector name number)))
56 12687dd9 2023-08-04 jrmu (define (cheerleader-name acheerleader)
57 12687dd9 2023-08-04 jrmu (acheerleader (lambda (name number) name)))
58 12687dd9 2023-08-04 jrmu
59 12687dd9 2023-08-04 jrmu (define (cheerleader-number acheerleader)
60 12687dd9 2023-08-04 jrmu (acheerleader (lambda (name number) number)))
61 12687dd9 2023-08-04 jrmu
62 12687dd9 2023-08-04 jrmu (define Abbo (make-cheerleader 'Abbo 53535))
63 12687dd9 2023-08-04 jrmu (cheerleader-name Abbo)
64 12687dd9 2023-08-04 jrmu (cheerleader-number Abbo)
65 12687dd9 2023-08-04 jrmu
66 12687dd9 2023-08-04 jrmu (define (make-CD artist title price)
67 12687dd9 2023-08-04 jrmu (local ((define artist0 artist)
68 12687dd9 2023-08-04 jrmu (define title0 title)
69 12687dd9 2023-08-04 jrmu (define price0 price)
70 12687dd9 2023-08-04 jrmu (define (service-manager msg)
71 12687dd9 2023-08-04 jrmu (cond
72 12687dd9 2023-08-04 jrmu [(equal? msg 'artist) artist0]
73 12687dd9 2023-08-04 jrmu [(equal? msg 'title) title0]
74 12687dd9 2023-08-04 jrmu [(equal? msg 'price) price0])))
75 12687dd9 2023-08-04 jrmu service-manager))
76 12687dd9 2023-08-04 jrmu
77 12687dd9 2023-08-04 jrmu (define (CD-artist aCD)
78 12687dd9 2023-08-04 jrmu (aCD 'artist))
79 12687dd9 2023-08-04 jrmu
80 12687dd9 2023-08-04 jrmu (define (CD-title aCD)
81 12687dd9 2023-08-04 jrmu (aCD 'title))
82 12687dd9 2023-08-04 jrmu
83 12687dd9 2023-08-04 jrmu (define (CD-price aCD)
84 12687dd9 2023-08-04 jrmu (aCD 'price))
85 12687dd9 2023-08-04 jrmu
86 12687dd9 2023-08-04 jrmu (define BeeGees (make-CD 'BeeGees 'SaturdayNightFever 9.99))
87 12687dd9 2023-08-04 jrmu (CD-artist BeeGees)
88 12687dd9 2023-08-04 jrmu (CD-title BeeGees)
89 12687dd9 2023-08-04 jrmu (CD-price BeeGees)
90 12687dd9 2023-08-04 jrmu
91 12687dd9 2023-08-04 jrmu (define (make-sweater material size producer)
92 12687dd9 2023-08-04 jrmu (lambda (selector)
93 12687dd9 2023-08-04 jrmu (selector material size producer)))
94 12687dd9 2023-08-04 jrmu (define (sweater-material asweater)
95 12687dd9 2023-08-04 jrmu (asweater (lambda (material size producer) material)))
96 12687dd9 2023-08-04 jrmu (define (sweater-size asweater)
97 12687dd9 2023-08-04 jrmu (asweater (lambda (material size producer) size)))
98 12687dd9 2023-08-04 jrmu (define (sweater-producer asweater)
99 12687dd9 2023-08-04 jrmu (asweater (lambda (material size producer) producer)))
100 12687dd9 2023-08-04 jrmu
101 12687dd9 2023-08-04 jrmu (define YellowJacket (make-sweater 'Cotton 'Large 'Unknown))
102 12687dd9 2023-08-04 jrmu (sweater-material YellowJacket)
103 12687dd9 2023-08-04 jrmu (sweater-size YellowJacket)
104 12687dd9 2023-08-04 jrmu (sweater-producer YellowJacket)