問題4.2 – SICP(計算機プログラムの構造と解釈)その175
2009年05月10日
問題4.2
a.
gosh> (load "./hoge.scm") #t gosh> (driver-loop) ;;; M-Eval input: (define x 3) *** ERROR: Unbound variable define Stack Trace: _______________________________________ 0 (eval (operator exp) env) At line 36 of "./hoge.scm" 1 (eval input the-global-environment) At line 346 of "./hoge.scm" gosh>
b.
application?
を assignment?
の前に持ってきて、application?
の定義を tagged-list?
を使ったものに変更する。
式の演算子・被演算子の前に call
が追加されるので、operator
、operands
手続きも変更する。
(define (eval exp env) (cond ((self-evaluating? exp) exp) ((variable? exp) (lookup-variable-value exp env)) ((quoted? exp) (text-of-quotation exp)) ((application? exp) (apply (eval (operator exp) env) (list-of-values (operands exp) env))) ((assignment? exp) (eval-assignment exp env)) ((definition? exp) (eval-definition exp env)) ((if? exp) (eval-if exp env)) ((lambda? exp) (make-procedure (lambda-parameters exp) (lambda-body exp) env)) ((begin? exp) (eval-sequence (begin-actions exp) env)) ((cond? exp) (eval (cond->if exp) env)) (else (error "Unknown expression type -- EVAL" exp)))) (define (application? exp) (tagged-list? exp 'call)) (define (operator exp) (cadr exp)) (define (operands exp) (cddr exp)) ... (define primitive-procedures (list (list 'car car) (list 'cdr cdr) (list 'cons cons) (list 'null? null?) (list '+ +) ;; + を追加 ;; 基本手続きが続く ))
実行結果
gosh> (load "./hoge.scm") #t gosh> (driver-loop) ;;; M-Eval input: (call + 1 2) ;;; M-Eval value: 3 ;;; M-Eval input: (+ 1 2) *** ERROR: Unknown expression type -- EVAL (+ 1 2) Stack Trace: _______________________________________ 0 (eval input the-global-environment) At line 348 of "./hoge.scm" gosh>
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542