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")))))
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
16 (define (make-movie title producer)
17 (local ((define title0 title)
18 (define producer0 producer)
19 (define (service-manager msg)
21 [(equal? msg 'title) title0]
22 [(equal? msg 'producer) producer0])))
25 (define (movie-title amovie)
28 (define (movie-producer amovie)
31 (define SciFi (make-movie 'StarWars 'GeorgeLucas))
33 (movie-producer SciFi)
35 (define (make-boyfriend name hair eyes phone)
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)
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)
70 (define (service-manager msg)
72 [(equal? msg 'artist) artist0]
73 [(equal? msg 'title) title0]
74 [(equal? msg 'price) price0])))
77 (define (CD-artist aCD)
80 (define (CD-title aCD)
83 (define (CD-price aCD)
86 (define BeeGees (make-CD 'BeeGees 'SaturdayNightFever 9.99))
91 (define (make-sweater material size producer)
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)