甲州記法の関係写像演算子の引数は、 引数の各部分を連想項目とする連想リストに分解されます。 この分解する仕組みを共通のライブラリに組み込むことで、 関係写像演算子は、連想リストとして引数を受け取りつつ、 演算子の見た目を単純で、理解しやすいものにできます。
たとえば、/x 1
から /x 10
までの
10 組を出力する関係写像
range /x -from 1 -to 10
には、つぎの 3 つの連想項目があります。
連想名 | empty | -from | -to |
---|---|---|---|
連想内容 | /x |
1 |
10 |
連想名が empty になっている連想項目に対して、
-term
という名前も与えることで、
通常の連想名で読み取れる連想リストに変換します。
連想名 | -term | empty | -from | -to |
---|---|---|---|---|
連想内容 | /x |
/x |
1 |
10 |
この連想リストが関係写像の引数の実体になります。
判断集合を関係として読み出す source P /x /y
は、
empty からふたつの連想項目が生じます。
連想名 | empty |
---|---|
連想内容 | P /x /y |
この empty を先頭要素 head
と
残りの要素のリスト tail
に分解することで、
つぎのような連想リストに変換します。
連想名 | -pattern | -term | empty |
---|---|---|---|
連想内容 | P |
/x /y |
P /x /y |
甲州記法では、source P /x /y
の代わりに、
連想名を明示して source -pattern P -term /x /y
とも書けます。
この場合、まず、つぎのような連想リスト
連想名 | empty | -pattern | -term |
---|---|---|---|
連想内容 | P |
/x /y |
が得られ、-pattern
と -term
がすでに含まれているので、
empty をさらに分解することはありません。
引数を連想リストに変換する手順は、つぎのようになります。
-
トークン木のリストである引数を
-???
のような単語を連想名として分割します。 -
連想リストに同名の連想項目が複数あるときは、 処理を中断します。
-
空の連想名 empty を、通常の連想名に分割します。 ただし、分割することによって、連想名が重複するときは、 なにもしません。
このノートは甲州計算機バーラ実装のバージョン 0.38 に対して記述されました。