問題4.7 – SICP(計算機プログラムの構造と解釈)その180
2009年05月16日
問題4.7
[SICP] 問題4.7 – papamitraの日記 – 個人用SICP勉強グループ を参考にした。
(define (eval exp env) (cond ((self-evaluating? exp) exp) ; 省略 ((let*? exp) (eval (let*->nested-lets exp) env)) ; 省略 (else (error "Unknown expression type -- EVAL" exp)))) ;;;; let* (define (let*? exp) (tagged-list? exp 'let*)) (define (let*-clauses exp) (cdr exp)) (define (let*-bindings clauses) (car clauses)) (define (let*-body clauses) (cadr clauses)) (define (make-let* defs body) (list 'let defs body)) (define (let*->nested-lets exp) (if (null? exp) 'false (let ((clauses (let*-clauses exp))) (let ((bindings (let*-bindings clauses)) (body (let*-body clauses))) (define (iter rest-bindings) (if (null? rest-bindings) body (make-let* (list (car rest-bindings)) (iter (cdr rest-bindings))))) (iter bindings)))))
実行結果
;;; M-Eval input: (let* ((x 3) (y (+ x 2)) (z (+ x y 5))) (* x z)) ;;; M-Eval value: 39
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542