Skip to content

Latest commit

 

History

History

relmap-operand

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

関係写像演算子の引数

このノートでは、甲州計算機の関係写像演算子の実装のなかで、 引数を取り出す方法を説明します。 甲州計算機のバージョン 0.42 に対応します。

たとえば、関係写像演算子 pick に引数を与えた pick /x /y のような関係写像として機能する式を、 「関係写像演算子の使用」(use of relmap operator; use of rop) とよぶことがあります。関係写像演算子の使用は RopUse c というデータ型にまとめられます。 pick /x /ypick -term /x /y と同じなので、 部分引数の名前 -term を指定して、その内容を ["/x", "/y"] という項目名のリストとして取り出します。 この項目リストを取り出すために使う関数 getTermsRopUse c -> String -> Ab [String] という型をもっています。この関数を使うと、 -term の内容である項目名のリストが得られるか、 pick x y のように項目名がないときはエラーが得られます。

以下に、関係写像演算子の引数を取得する関数を説明します。 その関数を使っている関係写像のコードを説明の下に書きます。

int

関数 getInt は引数の内容を整数値 Int として取得します。 引数がひとつの整数値ではないときはエラーになります。

range /n -from 0 -to 10

maybe

関数 getMaybe は、ほかの関数 getXxx といっしょに使われ、 引数がないときは Nothing を返し、 引数があるときは、getXxx で取り出した結果を Just に包んで返します。

term-check -just /x /y

option

関数 getOption は、ほかの関数 getXxx といっしょに使われ、 引数がないときは既定値を返し、 引数があるときは、getXxx で取り出した結果を返します。

-order が省略されたときの既定値は [] です。

number /n  -order /x /y

relmap

関数 getRelmap は関係写像に含まれる 部分関係写像 Relmap c を取得します。 関係写像は -relmap という名前のもとにまとめられる 決まりになっているので、名前を与える必要はありません。

引数のなかに関係写像が複数含まれているときはエラーになります。

meet a

relmaps

関数 getRelmaps は関係写像に含まれる 部分関係写像のリスト [Relmap c] を取得します。 関係写像は -relmap という名前のもとにまとめられる 決まりになっているので、名前を与える必要はありません。

switch

関数 getSwitch は引数をスイッチとみなして Bool 型の値を取得します。 これは -xxx のようなスイッチが与えられているかどうかを 判定するときに使います。

-dense はスイッチで、書かないか -dense とだけ書くかのどちらかになります。

rank /n  -order /x /y  -dense

trees

関数 getTrees は引数の内容をトークン木のリスト [TokenTere] として取得します。

関係写像演算子の使用を解析した最初の段階は トークン木のリストになっているので、 これはもっとも基礎的な引数取得関数です。

hold /n < 10

term

関数 getTerm は引数の内容を項目名 Termname として取得します。 引数がひとつではないときはエラーになります。

contents /c

terms

関数 getTerms は引数の内容を項目名のリスト [Termname] として取得します。 引数が項目名ではないときはエラーになります。

pick /x /y

term pairs

関数 getTermPairs は偶数個の項目の並びを、 項目の組 [(Termname, Termname)] として取得します。 引数が項目名ではないときや、項目が奇数個のときはエラーになります。

rename /a /x
       /b /y

term trees

関数 getTermTrees は項目と任意の引数の並びを、 項目の組 [(Termname, TokenTree)] として取得します。 項目が奇数個のときはエラーになります。

add /plus  (/x + /y)
    /minus (/x - /y)

word

関数 getWord は引数の内容を String として取得します。 たとえば、甲州記法の abc'abc"abc" が Haskell の "abc" :: String として取得できます。

引数が単語ではないときはエラーになります。 /abc のような項目名のときもエラーです。

source A /x /y