Data Abstraction: Bane or Boon?

left top

(define make-var cons)
(define var.name car)
(define var.value cdr)

(define (variable.value var)
  (define (loop vars)
    (if (null? vars)
        (error "Undefined variable" var)
        (let ((first-var (first vars)))
          (if (eq? var (var.name first-var))
              (var.value first-var)
              (loop (cdr vars))))))
  (loop variables))

(define (variable.value name)
  (let ((entry (assq name variables)))
    (if entry
        (cdr entry)
        (error "No such variable" name))))

Jim Miller W3C