(wat-aro)

無職から有職者にランクアップしました

SICP 問題1.5

問題1.5

(define (p) (p))

(define (test x y)
  (if (= x 0)
      0
      y))

(test 0 (p))

を実行した時,作用的順序の評価を使う解釈系と正規順序の評価を使う解釈系それぞれでどういう仏舞を見るか説明せよ.

作用的順序を使う解釈系ではまず(test 0 (p))を (if (= 0 0) 0 (p)) と評価し,(= 0 0)が#tなのでthenが評価され0が返る. 正規順序の評価を使う解釈系では (if (= 0 0) 0 (p)) と評価するところまでは同じだが,この後基本的演算子だけになるまで評価を繰り返す. そのため(p)を評価し,その結果(p)が返り,それをまた評価しようとするので 演算が終わらない.