このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

演算「・」と定数「I」をオーバーロード定義する

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に関して

  • リスト、バッグ、セットのいずれも“モノイド”(単位半群
  • バッグ、セットは“ベキ等モノイド”
  • セットは“可換ベキ等モノイド”

です。

(あ、もう歯医者行かなきゃ、続くとは思うけど、、、)