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

問題3.40

P1 : (lambda () (set! x (* x x)))
P2 : (lambda () (set! x (* x x x)))

プロセスを次のように分割する。

  • X1-1 : P1 の1番目の x へのアクセス
  • X1-2 : P1 の2番目の x へのアクセス
  • Xe1 : P1 の x への設定
  • X2-1 : P2 の 1番目の x へのアクセス
  • X2-2 : P2 の 2番目の x へのアクセス
  • X2-3 : P2 の 3番目の x へのアクセス
  • Xe2 : P2 の x への設定

以下のような値が考えられる。

X1-1 -> X1-2 -> Xe1 -> X2-1 -> X2-2 -> X2-3 -> Xe2 => 1000000
X2-1 -> X2-2 -> X2-3 -> Xe2 -> X1-1 -> X1-2 -> Xe1 => 1000000
X2-1 -> X1-1 -> X1-2 -> Xe1 -> X2-2 -> X2-3 -> Xe2 => 100000
X1-1 -> X2-1 -> X2-2 -> X2-3 -> Xe2 -> X1-2 -> Xe1 => 10000
X2-1 -> X2-2 -> X1-1 -> X1-2 -> Xe1 -> X2-3 -> Xe2 => 10000
X2-1 -> X2-2 -> X2-3 -> X1-1 -> X1-2 -> Xe1 -> Xe2 => 1000
X2-1 -> X2-2 -> X2-3 -> X1-1 -> X1-2 -> Xe2 -> Xe1 => 100

以下のように直列化した場合は、

P1 : (s (lambda () (set! x (* x x))))
P2 : (s (lambda () (set! x (* x x x))))

1000000 のみが結果となる。

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