2項(引数を2つ持つ)演算「・」を、リスト、バッグ、セットに対してオーバーロード定義しましょう。事例で定義に代えます。
- リスト:(1, 2, 1, 3)・(3, 3, 5) = (1, 2, 1, 3, 3, 3, 5)
- バッグ:[1, 2, 1, 3]・[3, 3, 5] = [1, 2, 1, 3, 3, 3, 5]
- セット:{1, 2, 3}・{3, 5} = {1, 2, 3, 5}
これらの演算は、連接とか合併と呼ばれるものですね。記号「+」を使わなかったのは、後で「+」を別な意味で使うからです。
ついでに(?)、記号「I」(大文字アイ)を次の意味でオーバーロード定義しておきます。
- リスト:I = ()
- バッグ:I = []
- セット:I = {}
演算子/定数のオーバーロードのおかげで、リスト、バッグ、セットで共通に成立する法則を一度に記述できます。
- (x・y)・z = x・(y・z)
- x・I = I・x = x
さらにバッグとセットでは、
- x・x = x
セットだけで成立するのは、
- x・y = y・x
となります。
代数の用語法では(別に気にしなくていいですが)、・とIに関して
- リスト、バッグ、セットのいずれも“モノイド”(単位半群)
- バッグ、セットは“ベキ等モノイド”
- セットは“可換ベキ等モノイド”
です。
(あ、もう歯医者行かなきゃ、続くとは思うけど、、、)