問題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
