開発環境
- 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 コメント:
コメントを投稿