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

問題4.27

(define count 0)

(define (id x)
  (set! count (+ count 1))
  x)

(define w (id (id 10)))

作用的順序の評価器の場合

w を定義した時点で手続き id が2つとも評価されるので (set! count (+ count 1)) が2回実行されて count の評価結果は 2 となる。

count
gosh> 2
w
gosh> 10
count
gosh> 2

正規順序である遅延評価する評価器の場合

w を定義した時点では外側の id のみ評価されて、最初の count の評価結果は 1 となる。
w を評価すると内側の id の評価が行われて、2番目の count の評価結果は 2 となる。

;;; L-Eval input:
(define count 0)

;;; L-Eval value:
ok

;;; L-Eval input:
(define (id x)
  (set! count (+ count 1))
  x)

;;; L-Eval value:
ok

;;; L-Eval input:
(define w (id (id 10)))

;;; L-Eval value:
ok

;;; L-Eval input:
count

;;; L-Eval value:
1

;;; L-Eval input:
w

;;; L-Eval value:
10

;;; L-Eval input:
count

;;; L-Eval value:
2
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»