問題5.23 – SICP(計算機プログラムの構造と解釈)その274
2009年11月05日
問題5.23
最初 cond
と let
の eval-dispatch
での配置を application
よりも後にしていた為にエラーとなって動かなかった。
(define eceval-operations (list (list 'self-evaluating? self-evaluating?) ;; 省略 (list 'cond? cond?) (list 'cond->if cond->if) (list 'let? let?) (list 'let->combination let->combination) ;; 省略 )) (define eceval (make-machine ;; 省略 eval-dispatch ;; 省略 (test (op cond?) (reg exp)) (branch (label ev-cond)) (test (op let?) (reg exp)) (branch (label ev-let)) ;; 省略 ev-cond (assign exp (op cond->if) (reg exp)) (goto (label eval-dispatch)) ev-let (assign exp (op let->combination) (reg exp)) (goto (label eval-dispatch)) ;; 省略 )))
cond
の実行結果
;;; EC-Eval input: (define (zero? x) (cond ((> x 0) 'plus) ((= x 0) 'zero) (else 'minus))) ;;; EC-Eval value: ok ;;; EC-Eval input: (zero? 1) ;;; EC-Eval value: plus ;;; EC-Eval input: (zero? 0) ;;; EC-Eval value: zero ;;; EC-Eval input: (zero? -1) ;;; EC-Eval value: minus
let
の実行結果
;;; EC-Eval input: (let ((x (* 2 5)) (y (+ 2 3))) (+ x y)) ;;; EC-Eval value: 15
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542