問題5.41 – SICP(計算機プログラムの構造と解釈)その292

問題5.41

(define (find-variable var ct-env)
  (define (frame-iter var frames frame-number)
    (if (null? frames)
        'not-found
        (let ((addr (scan-iter var (car frames) frame-number 0)))
             (if (null? addr)
                 (frame-iter var (cdr frames) (+ frame-number 1))
                 addr))))
  (define (scan-iter var frame frame-number displacement-number)
    (if (null? frame)
        '()
        (if (eq? var (car frame))
            (make-lexical-address frame-number displacement-number)
            (scan-iter var (cdr frame) frame-number (+ displacement-number 1)))))
  (frame-iter var ct-env 0))

実行結果

(find-variable 'c '((y z) (a b c d e) (x y)))
gosh> (1 2)
(find-variable 'x '((y z) (a b c d e) (x y)))
gosh> (2 0)
(find-variable 'w '((y z) (a b c d e) (x y)))
gosh> not-found
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»