開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の4(超言語的抽象)、4.1(超循環評価器)、4.1.2(式の表現)、問題 4.7を解いてみる。
その他参考書籍
問題 4.7
コード(BBEdit)
sample.scm
(define (let*? exp) (tagged-list? exp 'let*)) (define (let*-vars-and-exps exp) (cadr exp)) (define (let*-body exp) (cddr exp)) (define (let*->nested-lets exp) (expand-lets (let*-vars-and-exps exp) (let*-body exp))) (define (expand-lets lets body) (if (null? lets) body (list 'let (list (list (v (caar lets)) (e (caddr lets)))) (expand-lets (cdr lets) body)))) ;; 組み込み((eval (let*->nested-lets exp) env)である節を追加するだけで十分。 ;; 導出されたのでない式を使ってlet*を積極的に展開する必要はない (define (eval exp env) (cond () ;; … ((let? exp) (eval (let->combination exp) env)) ((let*? exp (eval (let*->nested-lets exp) env))) ;; …))
0 コメント:
コメントを投稿