開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- MIT/GNU Scheme (処理系)
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の5(レジスタ計算機での計算)、5.5(翻訳系)、翻訳系の概観、5.5.6(文面アドレス)、問題 5.39.を解いてみる。
その他参考書籍
問題 5.39.
コード(BBEdit)
sample.scm
(define (lexical-address-lookup lexical-address compile-time-env)
(let ((val (list-ref (list-ref compile-time-env
(car lexical-address))
(cadr lexical-address))))
(if (eq? val '*unassigned*)
(error
"Unassigned variable -- LEXICAL-ADDRESS-LOOKUP" lexical-address)
val)))
(define (lexical-address-set! val lexical-address compile-time-env)
(define (iter-frame frame-n var-n env)
(cond ((null? env)
(error
"Unbound compile-time-env -- LEXICAL-ADDRESS-SET!"
val lexical-address compile-time-env))
((= frame-n 0)
(iter-variable var-n (car env)))
(else (iter-frame (- frame-n 1) var-n (cdr env)))))
(define (iter-variable var-n frame)
(cond ((null? frame)
(error
"Unbound variable - LEXICAL-ADDRESS-SET!"
val lexical-address compile-time-env))
((= var-n 0)
(set-car! frame val))
((iter-variable val (- var-n (cdr frame))))))
(iter-frame (car lexical-address)
(cadr lexical-address)
compile-time-env))
0 コメント:
コメントを投稿