(define (first-frame env)
(car env))
(define (first-variable frame)
(car frame))
(define (find-variable variable env)
(let ((frame-num 0)
(variable-num 0))
(define (scan-frame env)
(if (null? env)
'()
(let ((frame (first-frame env)))
(if (member variable frame)
frame
(begin
(set! frame-num (+ frame-num 1))
(scan-frame (cdr env)))))))
(define (scan-variable frame)
(if (null? frame)
'not-found
(let ((var (first-variable frame)))
(if (eq? variable var)
'done
(begin
(set! variable-num (+ variable-num 1))
(scan-variable (cdr frame)))))))
(let ((frame (scan-frame env)))
(let ((variable (scan-variable frame)))
(if (eq? variable 'not-found)
variable
(list frame-num variable-num))))))
実行
(find-variable 'y '((y z) (a b c d e) (x y)))