Skip to content

Latest commit

 

History

History

attribute-editor

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

演算属性の編集

甲州記法の関係写像演算子のパラメータは演算属性ともよばれます。 たとえば、演算子 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 2pos 2 30 と同じになり、 pospos 1 30 と同じになります。 属性編集演算子 fillpos の属性を受け取り、 指定された内容で埋めた属性を出力します。 その出力結果を、関係写像の本体が受け取ります。

省略可能な有標属性

つぎに、無標属性ではなく、有標属性を使った例をみてみましょう。 無標属性は位置で決まる属性で、有標属性は -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

この関係写像は、つぎのように動作します。

  1. 与えられた属性を opt -a 1 で編集し、 -a がなければ、その属性を内容 1 とともに追加する。

  2. その結果の属性を opt -b 30 で編集し、 -b がなければ、その属性を内容 30 とともに追加する。

  3. その結果の属性を、関係写像の本体 keep /a = @a and /b = @b に埋め込む。

  4. その関係写像を実行する。

有標属性の追加

属性編集演算子 add を使うと、与えられていない属性を追加できます。

op : keep /a = @a and /b = @b
  --attr add -a 1
       | add -b 30

この演算子は、単に、p | op のように使います。 この例では add を使う意味がほとんどありませんが、 関係写像の本体が長いときは、add を使って部分式に名前をつけることで、 整理して記述できます。