Skip to content

Latest commit

 

History

History

divide-into-assoc

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

連想リストへの分割

甲州記法の関係写像演算子の引数は、 引数の各部分を連想項目とする連想リストに分解されます。 この分解する仕組みを共通のライブラリに組み込むことで、 関係写像演算子は、連想リストとして引数を受け取りつつ、 演算子の見た目を単純で、理解しやすいものにできます。

range

たとえば、/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

判断集合を関係として読み出す 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 をさらに分解することはありません。

処理手順

引数を連想リストに変換する手順は、つぎのようになります。

  1. トークン木のリストである引数を -??? のような単語を連想名として分割します。

  2. 連想リストに同名の連想項目が複数あるときは、 処理を中断します。

  3. 空の連想名 empty を、通常の連想名に分割します。 ただし、分割することによって、連想名が重複するときは、 なにもしません。

このノートは甲州計算機バーラ実装のバージョン 0.38 に対して記述されました。