問題5.23 – SICP(計算機プログラムの構造と解釈)その274

問題5.23

最初 condleteval-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
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»