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