コンピュータプログラミングの概念・技法・モデル
(IT Architect' Archive
クラシックモダン・コンピューティング6)
(IT Architects’Archive CLASSIC MODER)
(翔泳社)
セイフ・ハリディ (著), ピーター・ヴァン・ロイ (著)
Peter Van-Roy (著), Seif Haridi (著), 羽永 洋 (翻訳)
原書: Concepts, Techniques,
and Models of Computer Programming
開発環境
- OS X Yosemite - Apple (OS)
- Emacs (Text Editor)
- Oz (プログラミング言語)
- Mozartプログラミングシステム(Mozart 2) (実装)
コンピュータプログラミングの概念・技法・モデル(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 コメント:
コメントを投稿