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

問題3.38

問題a.

6通りある。

Peter ->  Paul ->  Mary  =>  110 -> 90 -> 45
Peter ->  Mary ->  Paul  =>  110 -> 55 -> 35
 Paul -> Peter ->  Mary  =>   80 -> 90 -> 45
 Paul ->  Mary -> Peter  =>   80 -> 40 -> 50
 Mary -> Peter ->  Paul  =>   50 -> 60 -> 40
 Mary ->  Paul -> Peter  =>   50 -> 30 -> 40

問題b.

実行時の各ステップを手続きにして、いろいろな順で実行してみる。

(define peter-balance '())
(define paul-balance '())
(define mary-balance1 '())
(define mary-balance2 '())

(define (peter-access)
  (set! peter-balance balance))

(define (peter-set-balance!)
  (set! balance (+ peter-balance 10)))

(define (paul-access)
  (set! paul-balance balance))

(define (paul-set-balance!)
  (set! balance (- paul-balance 20)))

(define (mary-access1)
  (set! mary-balance1 balance))

(define (mary-access2)
  (set! mary-balance2 balance))

(define (mary-set-balance!)
  (set! balance (- mary-balance2 (/ mary-balance1 2))))

実行例1

(define balance 100)

(peter-access)
gosh> 100
(paul-access)
gosh> 100
(peter-set-balance!)
gosh> 110
(mary-access1)
gosh> 110
(paul-set-balance!)
gosh> 80
(mary-access2)
gosh> 80
(mary-set-balance!)
gosh> 25

実行例2

(define balance 100)

(peter-access)
gosh> 100
(paul-access)
gosh> 100
(mary-access1)
gosh> 100
(mary-access2)
gosh> 100
(paul-set-balance!)
gosh> 80
(mary-set-balance!)
gosh> 50
(peter-set-balance!)
gosh> 110
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»