Code Review
Compare your solutions
#| BEGIN (Write your solution here) |#
; My code
(define (get op div)
(cond
((and (eq? op 'get-name) (eq? div 'ins1-record)) (lambda (record) (cdr (car record))))
((and (eq? op 'get-name) (eq? div 'ins2-record)) (lambda (record) (car record)))
((and (eq? op 'get-salary) (eq? div 'ins1-record)) (lambda (record) (cdr (cadddr record))))
((and (eq? op 'get-salary) (eq? div 'ins2-record)) (lambda (record) (caddr (cadr record))))
)
)
(define (get-record typed-ins name)
(let ((tag (type-tag typed-ins)) (records (cdr typed-ins)) (get-name (get 'get-name (type-tag typed-ins))))
(define (get-record-inner rest-records)
(cond
((null? rest-records) '())
((equal? (get-name (car rest-records)) name) (attach-tag tag (car rest-records)))
(else (get-record-inner (cdr rest-records)))
)
)
(get-record-inner records)
)
)
(define (get-salary record)
(let ((record-content (cdr record)) (get-salary-imp (get 'get-salary (type-tag record))))
(get-salary-imp record-content)
)
)
(define (find-employee-record typed-inses name)
(if (null? typed-inses)
'()
(let ((typed-ins (car typed-inses)))
(let ((record (get-record typed-ins name)))
(if (null? record)
(find-employee-record (cdr typed-inses) name)
(cdr record)
)
)
)
)
)
#| END |#