開発環境
- 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.40.を解いてみる。
その他参考書籍
問題 5.40.
修正、追加箇所。
コード(BBEdit)
sample.scm
(define (compile exp target linkage compile-time-env)
(cond ((self-evaluating? exp)
(compile-self-evaluating exp target linkage))
((quoted? exp) (compile-quoted exp target linkage))
((variable? exp)
(compile-variable exp target linkage compile-time-env))
((assignment? exp)
(compile-assignment exp target linkage compile-time-env))
((definition? exp)
(compile-definition exp target linkage compile-time-env))
((if? exp) (compile-if exp target linkage compile-time-env))
((lambda? exp) (compile-lambda exp target linkage compile-time-env))
((begin? exp)
(compile-sequence (begin-actions exp)
target
linkage
compile-time-env))
((cond? exp) (compile (cond->if exp) target linkage compile-time-env))
((open-code? exp)
(compile-open-code exp target linkage compile-time-env))
((application? exp)
(compile-application exp target linkage compile-time-env))
(else
(error "Unknown expression type -- COMPILE" exp))))
;;
(define (compile-lambda-body exp proc-entry compile-time-env)
(let ((formals (lambda-parameters exp)))
(append-instruction-sequences
(make-instruction-sequence '(env proc argl) '(env)
`(,proc-entry
(assign env (op compiled-procedure-env) (reg proc))
(assign env
(op extend-environment)
(const ,formals)
(reg argl)
(reg env))))
(compile-sequence (lambda-body exp)
'val
'return
(cons formals compile-time-env)))))
0 コメント:
コメントを投稿