問題4.27 – SICP(計算機プログラムの構造と解釈)その201
2009年06月14日
問題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
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542