2015年1月24日土曜日

開発環境

コンピュータプログラミングの概念・技法・モデル(IT Architect' Archiveクラシックモダン・コンピューティング6) (IT Architects’Archive CLASSIC MODER)(セイフ・ハリディ (著)、ピーター・ヴァン・ロイ (著)、Peter Van-Roy (著)、 Seif Haridi (著)、羽永 洋 (翻訳) 、翔泳社、原書: Concepts, Techniques, and Models of Computer Programming(CTM))の第部(一般的計算モデル)、第2章(宣言的計算モデル)、2.9(練習問題)、13.(単一化)を解いてみる。

13.(単一化)

X=[a Z] Y=[W b] X=Yの順序の場合

local W X Y Z in
   X=[a Z]
   Y=[W b]
   X=Y
   ...
end

local文を実行
([(X=[a, Z] Y=[W b] X=Y, {W -> w, X -> x, Y -> y, Z -> z})],
{w, x, y, z})

直列合成
([(X=[a, Z], {W -> w, X -> x, Y -> y, Z -> z}),
  (Y=[W b], {W -> w, X -> x, Y -> y, Z -> z}),
  (X=Y, {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x, y, z})

(X=[a, Z], {W -> w, X -> x, Y -> y, Z -> z})をポップ
([(Y=[W b], {W -> w, X -> x, Y -> y, Z -> z}),
  (X=Y, {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = [a, z], y, z})

(Y=[W b], {W -> w, X -> x, Y -> y, Z -> z})をポップ
([(X=Y, {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = [a, z], y = [w b], z = b})

(X=Y, {W -> w, X -> x, Y -> y, Z -> z})をポップ
([(..., {W -> w, X -> x, Y -> y, Z -> z})],
  {w = a, x=[a, z], y=[w b], z = b})

Y=[W b] X=Y X=[a Z]の順序の場合

local W X Y Z in
   Y=[W b]
   X=Y
   X=[a Z]
   ...
end

([(Y=[W b], X=Y, X=[a Z], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x, y, z})

([(X=Y, {W -> w, X -> x, Y -> y, Z -> z}),
  (X=[a Z], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x, y = [w b], z})

([(X=[a Z], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = y, y = [w b], z})

([(..., {W -> w, X -> x, Y -> y, Z -> z})],
 {w = a, x = y, y = [a b], z = b})

X=Y X=[a Z] Y=[W b]の順序の場合
local W X Y Z in
   X=Y
   X=[a Z]
   Y=[W b]   
   ...
end

([(X=Y X=[a Z] Y=[W b], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x, y, z})

([(X=Y X=[a Z] Y=[W b], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x, y, z})

([(X=[a Z], {W -> w, X -> x, Y -> y, Z -> z}),
  (Y=[W b], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = y, y, z})

([(Y=[W b], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = y, y = [a z], z})

([(..., {W -> w, X -> x, Y -> y, Z -> z})],
 {w = a, x = y, y = [a z], z = b})

X=[a Z] X=Y Y=[W b]の順序の場合
([(X=Y, {W -> w, X -> x, Y -> y, Z -> z}),
  (Y=[W b], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = [a z], y, z})

([(Y=[W b], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = [a z], y = x, z})

([(..., {W -> w, X -> x, Y -> y, Z -> z})],
 {w = a, x = [a z], y = x, z = b})

Y=[W b] X=[a Z] X=Yの順序の場合
([(X=[a Z], {W -> w, X -> x, Y -> y, Z -> z}),
  (X=Y, {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x, y = [w b], z})

([(X=Y, {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = [a z], y = [w b], z})

([(..., {W -> w, X -> x, Y -> y, Z -> z})],
 {w = a, x = [a z], y = [w b], z = b})

X=Y Y=[W b] X=[a Z]の順序の場合
([(Y=[W b], {W -> w, X -> x, Y -> y, Z -> z}),
  (X=[a Z], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = y, y, z})

([(X=[a Z], {W -> w, X -> x, Y -> y, Z -> z})],
 {w, x = y, y = [w b], z})

([(..., {W -> w, X -> x, Y -> y, Z -> z})],
 {w = a, x = y, y = [w b], z = b})

よって、どんな順序に単一化しても、変数X、Yは[a b]、変数Zはb、変数Wはaと同じ値に束縛される。

0 コメント:

コメントを投稿