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 |#