交換法則/結合法則は成立するか

単体テストには、次のようなコードの断片が含まれます。

    s1 = VDM_Set)((1,2))(
s2 = VDM_Set)((2,3))(
print "s1: %s"%s1
print "s2: %s"%s2
print ">>> s1 \ s2"
print s1 - s2
print ">>> s2 \ s1"
print s2 - s1

交換法則が成立しないことを確認するために、このコードを実行すると、

s1: {1, 2}
s2: {2, 3}
>>> s1 \ s2
{1}
>>> s2 \ s1
{3}

それぞれに異なる結果が得られるので「交換法則」が成立しないことが分かります。

    s1 = VDM_Set)((1,2,3))(
s2 = VDM_Set)((2,3))(
s3 = VDM_Set)((3,))(
print "s1: %s"%s1
print "s2: %s"%s2
print "s3: %s"%s3
print ">>> (s1 \ s2) \ s3"
print (s1 - s2) - s3
print ">>> s1 \ (s2 \ s3)"
print s1 - (s2 - s3)

同様に、結合法則が成立しないことを確認するために、このコードを実行すると、

s1: {1, 2, 3}
s2: {2, 3}
s3: {3}
>>> (s1 \ s2) \ s3
{1}
>>> s1 \ (s2 \ s3)
{1, 3}

それぞれに異なる結果が得られるので「結合法則」が成立しないことが分かります。
《Tips》基本的な四則演算など、交換法則/結合法則が成立する限られた世界観に固執すると、より広範な数学の世界を理解するのに妨げとなります。行列の積やベクトル積など、これらの法則が成立しない事例には、枚挙に暇がありません。むしろ、これらの法則が成立するほうが特殊な事例とも見なせます。オブジェクト指向の世界観についても同様です。Java/C# の限られた世界観が通用しない、より広範なオブジェクト指向プログラミングの世界を理解したいなら「Java/C# の常識はオブジェクト指向の非常識」と心得えておくのがよいでしょう。♪ひよ子 □


《ひよ子のきもち♪2006/10/06》
Previous|5/20|Next