問題4.33 – SICP(計算機プログラムの構造と解釈)その207
2009年06月27日
問題4.33
元の評価器でのクォート式の実行結果
;;; L-Eval input:
(define (cons x y)
(lambda (m) (m x y)))
;;; L-Eval value:
ok
;;; L-Eval input:
(define (car z)
(z (lambda (p q) p)))
;;; L-Eval value:
ok
;;; L-Eval input:
(define (cdr z)
(z (lambda (p q) q)))
;;; L-Eval value:
ok
;;; L-Eval input:
(car '(a b c))
*** ERROR: Unknown procedure type -- APPLY (a b c)
Stack Trace:
_______________________________________
0 (eval exp env)
At line 55 of "./eval_with_delay.scm"
1 (actual-value input the-global-environment)
At line 424 of "./eval_with_delay.scm"
text-of-quotation の引数に環境 env を渡す。
クォート式がリストの場合は make-quotation-list を使って、新しい定義の cons でリストを作り直す。
(define (eval exp env) (cond ((self-evaluating? exp) exp) ;; 省略 ((quoted? exp) (text-of-quotation exp env)) ;; 省略 (else (error "Unknown expression type -- EVAL" exp)))) (define (text-of-quotation exp env) (if (list? (cadr exp)) (eval (make-quotation-list (cadr exp)) env) (cadr exp))) (define (make-quotation-list lis) (if (null? lis) '() (let ((first-list (car lis)) (rest-list (cdr lis))) (list 'cons (list 'quote first-list) (make-quotation-list rest-list)))))
新しい評価器でのクォート式の実行結果
;;; L-Eval input: (define (cons x y) (lambda (m) (m x y))) ;;; L-Eval value: ok ;;; L-Eval input: (define (car z) (z (lambda (p q) p))) ;;; L-Eval value: ok ;;; L-Eval input: (define (cdr z) (z (lambda (p q) q))) ;;; L-Eval value: ok ;;; L-Eval input: (car '(a b c)) ;;; L-Eval value: a
問題4.34
パス
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542
