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

問題4.28

演算子が手続きの場合に、演算子を強制する必要がある。

演算子の強制をする場合

((application? exp)
 (apply (actual-value (operator exp) env)
        (operands exp)
        env))
;;; L-Eval input:
(define (foo x)
  (+ x 1))

;;; L-Eval value:
ok

;;; L-Eval input:
(foo 2)

;;; L-Eval value:
3

;;; L-Eval input:
(define (hoge proc)
  (proc 10))

;;; L-Eval value:
ok

;;; L-Eval input:
(hoge foo)
;;; L-Eval value:
11

演算子の強制をしない場合

((application? exp)
 (apply (eval (operator exp) env)
        (operands exp)
        env))
;;; L-Eval input:
(define (foo x)
  (+ x 1))

;;; L-Eval value:
ok

;;; L-Eval input:
(foo 2)

;;; L-Eval value:
3

;;; L-Eval input:
(define (hoge proc)
  (proc 10))

;;; L-Eval value:
ok

;;; L-Eval input:
(hoge foo)
*** ERROR: Unknown procedure type -- APPLY (thunk foo #0=(((hoge foo false true car cdr cons null? assoc + - * / = < > print) (procedure (proc) ((proc 10)) #0#) (procedure (x) ((+ x 1)) #0#) #f #t (primitive #<subr car>) (primitive #<subr cdr>) (primitive #<subr cons>) (primitive #<subr null?>) (primitive #<subr assoc>) (primitive #<subr +>) (primitive #<subr ->) (primitive #<subr *>) (primitive #<subr />) (primitive #<subr =>) (primitive #<subr <>) (primitive #<subr >>) (primitive #<closure print>))))Stack Trace:
_______________________________________
  0  (eval exp env)
        At line 54 of "./eval_with_delay.scm"
  1  (actual-value input the-global-environment)
        At line 405 of "./eval_with_delay.scm"
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»