事例:演算 in

VDM++ での演算 in に準拠した事例を紹介します。

    s1 = VDM_Set(range(1,4))

e = 3
print ">>> %s in %s"%(e,s1)
X = e in s1
print X; assert X is True

e = 0
print ">>> %s in %s"%(e,s1)
X = e in s1
print X; assert X is False

任意の要素が「含まれる」ことを判定するには、演算子 in を利用します。このコードを実行すると、

>>> 3 in {1, 2, 3}
1
>>> 0 in {1, 2, 3}
0

整数 3 は、集合 s の要素に含まれますが、整数 0 は、その要素に含まれません。
《Note》Python 2.5.x では、bool 型の値は、True/False と表示されます。ただし、Jython 1.x/2.2.x では、それぞれ 1/0 と表示されます。□

    s1 = VDM_Set(range(1,4))

e = 3
print ">>> %s not in %s"%(e,s1)
X = e not in s1
print X; assert X is False

e = 0
print ">>> %s not in %s"%(e,s1)
X = e not in s1
print X; assert X is True

任意の要素が「含まれない」ことを判定するには、演算子 not in を利用します。このコードを実行すると、

>>> 3 not in {1, 2, 3}
0
>>> 0 not in {1, 2, 3}
1

整数 3 は、集合 s の要素に含まれませんが、整数 0 は、その要素に含まれます。

集合を要素とする集合についても、要素の帰属関係を判定できます。

    s0 = VDM_Set()
s1 = VDM_Set(range(1,2))
s2 = VDM_Set(range(2,4))
ss = VDM_Set([s0,s1,s2])

e = VDM_Set([2,3])
print ">>> %s in %s"%(e,s1)
X = e in ss
print X; assert X is True

e = VDM_Set([3])
print ">>> %s in %s"%(e,s1)
X = e in ss
print X; assert X is False

集合 ss は、3つの集合を要素とする集合です。このコードを実行すると、

>>> {2, 3} in {{}, {1}, {2, 3}}
1
>>> {3} in {{}, {1}, {2, 3}}
0

整数 {2,3} は、集合 ss の要素に含まれますが、整数 {3} は、その要素に含まれません。
《付記》集合 ss は、3つの集合を要素として含み、これらの(要素としての)集合の中には整数 3 を要素として含む集合があります。しかし、集合 {3} のように、整数 3 を要素とする集合は、これら(要素としての)3つの集合には含まれません。なぜなら、整数 3 と「整数 3 を要素とする」集合とは、別のオブジェクトだからです。これは、1つの文字と「1つの文字からなる」文字列とが、別のオブジェクトである状況と似ています。□