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.