パターンと変換規則
パターン
ある分類に属す式を表すものをパターンと呼ぶ.パターンは特定の種類の式を表すパターンオブジェクトを含んでいる.
| _ | 任意の式を表すパターン |
| x_ | 任意の式を表すパターン.抽出された式には名前 x が付けられる |
| x:pattern | 名前を x とするパターン |
| pattern?test | test を適用し,Trueを返すような式を表すパターン |
| _h | 頭部 h を持つ式を表すパターン |
| x_h | 頭部に h を持つ式を表すパターン.抽出された式には名前 x が付けられる |
| __ | 1つ以上の任意の式を表すパターン |
| ___ | 0個以上の任意の式を表すパターン |
| x__ および x___ | 抽出された式の列には名前 x が付けられる |
| __h および ___h | 頭部に h を持つ式の列を表すパターン |
| x__h および x___h | 頭部に h を持つ式の列を表すパターン.抽出された式には名前 x が付けられる |
| PatternSequence[p1,p2,...] | 一連のパターン |
| x_:v | 任意の式を表すパターン.デフォルト値は |
| x_h:v | 頭部 h を持つ任意の式を表すパターン.デフォルト値は |
| x_. | 任意の式を表すパターン.大域的に有効なデフォルト値が使われる |
| Optional[x_h] | 頭部 h を持ち,大域的にデフォルト値が定義された式 |
| Except[c] | c にマッチするもの以外の任意の式 |
| Except[c,pattern] | c にマッチするもの以外で pattern にマッチする任意の式 |
| pattern.. | パターンが1回以上繰り返される場合を表すパターン |
| pattern... | パターンが0回か1回以上繰り返される場合を表すパターン |
| Repeated[pattern, spec] | spec に従って繰り返されるパターン |
| pattern1|pattern2|... | パターン |
| pattern/;cond | 判定条 cond をTrueとする式を表すパターン |
| HoldPattern[pattern] | 評価しないまま使用するパターン |
| Verbatim[expr] | 与えた通りにマッチする式を表すパターン |
| OptionsPattern[] | 一連のオプション |
| Longest[pattern] | pattern からなる最長の文字列 |
| Shortest[pattern] | pattern からなる最短の文字列 |
Patternオブジェクト
複数の同じ名前を持ったパターンオブジェクトが1つのパターン内に存在するとき,それらのオブジェクトはすべて同一の式を指していなければならない.つまり,
では
は表せるが,
は表せない.
等のパターンオブジェクトにおいて,頭部 h はどのような式でもよいが,パターンであってはならない.
等のパターンオブジェクトは式の列を表す.例えば,式
はパターン
で表せる.そのとき,
はSequence[a, b, c]になる.パターンで抽出した後に
を変換規則で使用したなら,規則にある
に列が代入され,関数中の他の引数と一緒にされる.例えば,
の式は
になる.
関数の引数においてパターンオブジェクト
,
は,省略可能な引数を表す.
形式の引数が省略されたときは,x には値 v が使用される.
形式の引数が省略されるときは,x には関数に関連付けられているデフォルト値が取られる.このデフォルト値はDefault[f]の書式を使って設定できる.
| Default[f] | |
| Default[f,n] | |
| Default[f,n,tot] | 引数が全部で tot 個あるとき,n 番目の引数のデフォルト値を指定する |
Default値の設定
のようなパターンは,さまざまな
,
,
の組合せで
等とマッチする.このようなときは,まず,
,
が最小になるような組合せが試される.一般に,単一の関数に複数の
や
が使われている場合,最後尾にあるものを除いた,すべての
や
が最も短くなるような組合せが使用され,最後尾のパターンに残りがマッチする.
や
があるときは,どの引数も省略されていないという仮定のもとに関数の検索が行われる.その後で,後寄りの引数が省略されているとして検索が行われる.
異なる組合わせを試す順番はShortestあるいはLongestを使って変更できる.
| Orderless | |
| Flat | |
| OneIdentity |
のようなパターンオブジェクトは,属性Flatを備えた関数 f のどんな引数の列でも表せる.この場合,x の値は引数に f を適用したものになる.f がOneIdentityの属性を持ち,x がマッチするのが単一の引数であるなら,x には
ではなく e が使われる.
割当て
割当てとは,式に対して変換規則を指定することである.割当て操作は必ず特定のシンボルに関して設けられる.
のような割当て式を入力すると,f がまず検査され,次に f の頭部が,その次に引数の頭部が,というように割当て式を関連付けするシンボルが見付かるまで検査が続けられる.
一方,
のような割当て式を入力すると,左辺 lhs の引数として与えられたシンボルか,または lhs の引数の頭部に対して変換規則が設けられる.
シンボル s に関連付けられた変換規則は,決められた並び順で内部保管され,また,その順序に従い規則が適用される.新たな割当て定義を行うと,対応する変換規則は s 関連の変換規則リストの末尾に加えられることになっている.ただし,次の場合はその限りではない.
値の型
| Attributes[f] | f の持つ属性 |
| DefaultValues[f] | f の引数に与えるデフォルト値 |
| DownValues[f] | |
| FormatValues[f] | f に関連した出力用表記 |
| Messages[f] | f に関連したメッセージ |
| NValues[f] | f に関連した数値 |
| Options[f] | f に関連したオプションのデフォルト値 |
| OwnValues[f] | f そのものの値 |
| UpValues[f] |
オブジェクトの消去と除去
| expr=. | expr に定義してある値を消去 |
| f/:expr=. | expr に定義してある f に関する値を消去 |
| Clear[s1,s2,...] | シンボル |
| ClearAll[s1,s2,...] | シンボル |
| Remove[s1,s2,...] |
Clear,ClearAll,Removeでは,引数はシンボル,もしくは文字列としてのシンボルの名前として与える.文字列の引数にメタ文字の*および@を入れて,パターンにマッチする名前のシンボルに対するアクションを指定することができる.
Clear,ClearAll,Removeは属性Protectedを持つシンボルに対しては何も行わない.
変換規則
変換規則に現れるパターン変数に対する置換操作は,ReplaceAll(または,演算子
)を使い行われる.
