事例:演算 ++

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

    m1 = VDM_Map({"A":1,"B":2})
m2 = VDM_Map({"A":1,"C":3})
print ">>> %s ++ %s"%(m1,m2)
X = m1 + m2
print X; assert X == VDM_Map({"A":1,"B":2,"C":3})

写像 m1 に m2 を上書きした写像を得るには、演算子 + を利用します。このコードを実行すると、

>>> {'A' |-> 1, 'B' |-> 2} ++ {'A' |-> 1, 'C' |-> 3}
{'A' |-> 1, 'C' |-> 3, 'B' |-> 2}

上書きした写像は {'A' |-> 1, 'C' |-> 3, 'B' |-> 2} になります。このとき、写像対の順序には、意味がありません。

    m1 = VDM_Map({"A":1,"B":2})
m2 = VDM_Map({"A":0,"C":3})
print ">>> %s ++ %s"%(m1,m2)
X = m1 + m2
print X; assert X == VDM_Map({"A":0,"B":2,"C":3})

写像 m1 および m2 において、同じキーに異なる値が対応すると、これを上書きします。このコードを実行すると、

>>> {'A' |-> 1, 'B' |-> 2} ++ {'A' |-> 0, 'C' |-> 3}
{'A' |-> 0, 'C' |-> 3, 'B' |-> 2}

上書きした写像は {'A' |-> 0, 'C' |-> 3, 'B' |-> 2} になります。このとき、同じキー A に対して、上書きした値 0 が対応しています。