Blob


1 ;; The first three lines of this file were inserted by DrScheme. They record metadata
2 ;; about the language level of this file in a form that our tools can easily process.
3 #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 #|
5 Exercise 40.1.3. Show how to implement the following structure definitions as functions:
7 1. (define-struct movie (title producer))
8 2. (define-struct boyfriend (name hair eyes phone))
9 3. (define-struct cheerleader (name number))
10 4. (define-struct CD (artist title price))
11 5. (define-struct sweater (material size producer))
13 Pick one and demonstrate that the expected laws hold. Solution
14 |#
16 (define (make-movie title producer)
17 (local ((define title0 title)
18 (define producer0 producer)
19 (define (service-manager msg)
20 (cond
21 [(equal? msg 'title) title0]
22 [(equal? msg 'producer) producer0])))
23 service-manager))
25 (define (movie-title amovie)
26 (amovie 'title))
28 (define (movie-producer amovie)
29 (amovie 'producer))
31 (define SciFi (make-movie 'StarWars 'GeorgeLucas))
32 (movie-title SciFi)
33 (movie-producer SciFi)
35 (define (make-boyfriend name hair eyes phone)
36 (lambda (selector)
37 (selector name hair eyes phone)))
38 (define (boyfriend-name aboyfriend)
39 (aboyfriend (lambda (name hair eyes phone) name)))
40 (define (boyfriend-hair aboyfriend)
41 (aboyfriend (lambda (name hair eyes phone) hair)))
42 (define (boyfriend-eyes aboyfriend)
43 (aboyfriend (lambda (name hair eyes phone) eyes)))
44 (define (boyfriend-phone aboyfriend)
45 (aboyfriend (lambda (name hair eyes phone) phone)))
47 (define Aaron (make-boyfriend 'Aaron 'black 'black 715))
48 (boyfriend-name Aaron)
49 (boyfriend-hair Aaron)
50 (boyfriend-eyes Aaron)
51 (boyfriend-phone Aaron)
53 (define (make-cheerleader name number)
54 (lambda (selector)
55 (selector name number)))
56 (define (cheerleader-name acheerleader)
57 (acheerleader (lambda (name number) name)))
59 (define (cheerleader-number acheerleader)
60 (acheerleader (lambda (name number) number)))
62 (define Abbo (make-cheerleader 'Abbo 53535))
63 (cheerleader-name Abbo)
64 (cheerleader-number Abbo)
66 (define (make-CD artist title price)
67 (local ((define artist0 artist)
68 (define title0 title)
69 (define price0 price)
70 (define (service-manager msg)
71 (cond
72 [(equal? msg 'artist) artist0]
73 [(equal? msg 'title) title0]
74 [(equal? msg 'price) price0])))
75 service-manager))
77 (define (CD-artist aCD)
78 (aCD 'artist))
80 (define (CD-title aCD)
81 (aCD 'title))
83 (define (CD-price aCD)
84 (aCD 'price))
86 (define BeeGees (make-CD 'BeeGees 'SaturdayNightFever 9.99))
87 (CD-artist BeeGees)
88 (CD-title BeeGees)
89 (CD-price BeeGees)
91 (define (make-sweater material size producer)
92 (lambda (selector)
93 (selector material size producer)))
94 (define (sweater-material asweater)
95 (asweater (lambda (material size producer) material)))
96 (define (sweater-size asweater)
97 (asweater (lambda (material size producer) size)))
98 (define (sweater-producer asweater)
99 (asweater (lambda (material size producer) producer)))
101 (define YellowJacket (make-sweater 'Cotton 'Large 'Unknown))
102 (sweater-material YellowJacket)
103 (sweater-size YellowJacket)
104 (sweater-producer YellowJacket)