このノートでは、甲州計算機の関係写像演算子の実装のなかで、 引数を取り出す方法を説明します。 甲州計算機のバージョン 0.42 に対応します。
たとえば、関係写像演算子 pick
に引数を与えた
pick /x /y
のような関係写像として機能する式を、
「関係写像演算子の使用」(use of relmap operator; use of rop)
とよぶことがあります。関係写像演算子の使用は
RopUse c
というデータ型にまとめられます。
pick /x /y
は pick -term /x /y
と同じなので、
部分引数の名前 -term
を指定して、その内容を
["/x", "/y"]
という項目名のリストとして取り出します。
この項目リストを取り出すために使う関数 getTerms
は
RopUse c -> String -> Ab [String]
という型をもっています。この関数を使うと、
-term
の内容である項目名のリストが得られるか、
pick x y
のように項目名がないときはエラーが得られます。
以下に、関係写像演算子の引数を取得する関数を説明します。 その関数を使っている関係写像のコードを説明の下に書きます。
関数 getInt
は引数の内容を整数値 Int
として取得します。
引数がひとつの整数値ではないときはエラーになります。
range /n -from 0 -to 10
関数 getMaybe
は、ほかの関数 getXxx
といっしょに使われ、
引数がないときは Nothing
を返し、
引数があるときは、getXxx
で取り出した結果を Just
に包んで返します。
term-check -just /x /y
関数 getOption
は、ほかの関数 getXxx
といっしょに使われ、
引数がないときは既定値を返し、
引数があるときは、getXxx
で取り出した結果を返します。
-order
が省略されたときの既定値は []
です。
number /n -order /x /y
関数 getRelmap
は関係写像に含まれる
部分関係写像 Relmap c
を取得します。
関係写像は -relmap
という名前のもとにまとめられる
決まりになっているので、名前を与える必要はありません。
引数のなかに関係写像が複数含まれているときはエラーになります。
meet a
関数 getRelmaps
は関係写像に含まれる
部分関係写像のリスト [Relmap c]
を取得します。
関係写像は -relmap
という名前のもとにまとめられる
決まりになっているので、名前を与える必要はありません。
関数 getSwitch
は引数をスイッチとみなして Bool
型の値を取得します。
これは -xxx
のようなスイッチが与えられているかどうかを
判定するときに使います。
-dense
はスイッチで、書かないか -dense
とだけ書くかのどちらかになります。
rank /n -order /x /y -dense
関数 getTrees
は引数の内容をトークン木のリスト
[TokenTere]
として取得します。
関係写像演算子の使用を解析した最初の段階は トークン木のリストになっているので、 これはもっとも基礎的な引数取得関数です。
hold /n < 10
関数 getTerm
は引数の内容を項目名 Termname
として取得します。
引数がひとつではないときはエラーになります。
contents /c
関数 getTerms
は引数の内容を項目名のリスト [Termname]
として取得します。
引数が項目名ではないときはエラーになります。
pick /x /y
関数 getTermPairs
は偶数個の項目の並びを、
項目の組 [(Termname, Termname)]
として取得します。
引数が項目名ではないときや、項目が奇数個のときはエラーになります。
rename /a /x
/b /y
関数 getTermTrees
は項目と任意の引数の並びを、
項目の組 [(Termname, TokenTree)]
として取得します。
項目が奇数個のときはエラーになります。
add /plus (/x + /y)
/minus (/x - /y)
関数 getWord
は引数の内容を String
として取得します。
たとえば、甲州記法の abc
や 'abc
や "abc"
が
Haskell の "abc" :: String
として取得できます。
引数が単語ではないときはエラーになります。
/abc
のような項目名のときもエラーです。
source A /x /y