事例:演算 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 Truee = 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 Falsee = 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 Truee = 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つの文字からなる」文字列とが、別のオブジェクトである状況と似ています。□