Chapter 2, Building Abstractions with Data
Section - 2.4 Multiple Representations for Abstract Data
Exercise 2.74
(a)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(define (make-generic-file division specific-file)
(cons division specific-file)
)
(define (division-of-generic-file generic-file)
(car generic-file)
)
(define (specific-file-of-generic-file generic-file)
(cadr generic-file)
)
(define (get-record name generic-file)
(let (
(division (division-of-generic-file generic-file))
(specific-file (specific-file-of-generic-file generic-file))
)
( (get 'get-record division) specific-file)
)
)
(b)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(define (make-generic-record division specific-record)
(cons division specific-record)
)
(define (division-of-generic-record generic-record)
(car generic-record)
)
(define (specific-record-of-generic-record generic-record)
(cadr generic-record)
)
(define (get-salary name generic-record)
(let (
(division (division-of-generic-record generic-record))
(specific-record (specific-record-of-generic-record generic-record))
)
( (get 'get-record division) specific-record)
)
)
(c)
1
2
3
4
5
6
7
8
9
10
11
12
13
(define (find-employee-record name files)
(cond ((null? files) '())
((pair? files) (let
((rs (get-record name files)))
(if (null? rs)
(find-employee-record name (cdr files))
rs
)
)
)
(else (error "Invalid files, list expected"))
)
)
(d)
- add the procedures to tag their files and employee-records with correct division.
- procedure
get-record
,get-salary
,get-address
etc corresponding to their data records. - Submit/Store these procedures to the table using
put
.