甲州記法の関係写像演算子のパラメータは演算属性ともよばれます。
たとえば、演算子 pick
を使った演算 pick /a /b
の属性は /a /b
です。
この演算属性は、関係から一部の項目を抜き出すという演算のクラスに対して、
その詳細を特定して具体的な演算を確定する情報になっています。
pick
のような基底演算子、つまり、組み込みの演算子では、
甲州計算機のプログラムにより属性が処理されますが、
導出演算子、つまり、利用者定義の演算子では、
その定義にもとづいて属性が処理されます。
ここでは、導出演算子の定義のなかで、属性を追加したり、
変更したりする方法を説明します。
このノートに書かれている使用例は 入出力リスト で確認できます。
関係写像 p
の出力のうち、項目 /a 1
と /b 30
をもつ組を残すという計算を考えます。
|== AB-1 : p | keep /a = 1 and /b = 30
これと同じ計算は、無標属性 (位置による属性) @'1
@'2
を受ける導出演算子
ab : keep /a = @'1 and /b = @'2
を定義すると、
|== AB-2 : p | ab 1 30
のようにも書けます。
上で定義した演算子と同等の機能をもつけれど、
属性を省略して書けるような演算子を定義しましょう。
そのためには、属性編集機能を使って、省略された属性を補うようにします。
関係写像の定義を節属性 --attr
で分割し、
前半に写像の本体、後半に属性編集を書きます。
pos : keep /a = @'1 and /b = @'2
--attr fill 1 30
このように定義された演算子 pos
では属性が省略可能になっており、
pos 1 20
はそのまま pos 1 20
であり、
pos 2
は pos 2 30
と同じになり、
pos
は pos 1 30
と同じになります。
属性編集演算子 fill
は pos
の属性を受け取り、
指定された内容で埋めた属性を出力します。
その出力結果を、関係写像の本体が受け取ります。
つぎに、無標属性ではなく、有標属性を使った例をみてみましょう。
無標属性は位置で決まる属性で、有標属性は -a
のような標識つきの属性です。
たとえば、key -a 1 -b 30
のように使われると、
関係写像の本体の @a
@b
で、属性の内容を受けとれます。
これを省略可能にするには、fill
の代わりに、
opt
(option) を使って属性を編集します。
key : keep /a = @a and /b = @b
--attr opt -a 1
| opt -b 30
この関係写像は、つぎのように動作します。
-
与えられた属性を
opt -a 1
で編集し、-a
がなければ、その属性を内容1
とともに追加する。 -
その結果の属性を
opt -b 30
で編集し、-b
がなければ、その属性を内容30
とともに追加する。 -
その結果の属性を、関係写像の本体
keep /a = @a and /b = @b
に埋め込む。 -
その関係写像を実行する。
属性編集演算子 add
を使うと、与えられていない属性を追加できます。
op : keep /a = @a and /b = @b
--attr add -a 1
| add -b 30
この演算子は、単に、p | op
のように使います。
この例では add
を使う意味がほとんどありませんが、
関係写像の本体が長いときは、add
を使って部分式に名前をつけることで、
整理して記述できます。