|
A.5.1 パターン
ある分類に属す式を表すものをパターンと呼ぶ.パターンは特定の種類の式を表すパターンオブジェクトを含んでいる.

パターンオブジェクト
複数の同じ名前をもったパターンオブジェクトが1つのパターン内に存在するとき,それらのオブジェクトはすべて同一の式を指していなければならない.つまり,f[x_, x_]ではf[2, 2]は表せるが,f[2, 3]は表せない.
_h等のパターンオブジェクトにおいて,頭部hはどのような式でもよいが,パターンであってはなら ない.
x__等のパターンオブジェクトは式の列を表す.例えば,式f[a, b, c]はパターンf[x__]で表せる.そのとき,xはSequence[a, b, c]になる.パターンで抽出した後にxを変換規則で使用したなら,規則にあるxに列が代入され,関数中の他の引数と一緒にされる.例えば,g[u, x, u]の式はg[u, a, b, c, u]になる.
関数の引数においてパターンオブジェクトx_:v,x_.は,省略可能な引数を表す.x_:v形式の引数が省略されたときは,xには値vが使用される.x_.形式の引数が省略されるときは,xには関数に関連付けられているデフォルト値が取られる.このデフォルト値はDefault[f]の書式を使って設定できる.

デフォルト値の設定
f[x__, y__, z__]のようなパターンは,さまざまなx, y, zの組合せでf[a, b, c, d, e]等とマッチする.このようなときは,まず,x,yが最小になるような組合せが試される.一般に,単一の関数に複数の__や___が使われている場合,最後尾にあるものを除いた,すべての__や___が最も短くなるような組合せが使用され,最後尾のパターンに残りがマッチする.
x_:vやx_.があるときは,どの引数も省略されていないという仮定のもとに関数の検索が行われる.その後で,後寄りの引数が省略されているとして検索が行われる.

パターンマッチングで使われる属性
x_のようなパターンオブジェクトは,属性Flatを備えた関数fのどんな引数の列でも表せる.この場合,xの値は引数にfを適用したものになる.xが対応する列に1つの引数しかないときは,もしfにOneIdentityの属性があるなら,f[e]ではなくeが使われる.さらに,fがOneIdentityの属性をもち,xがマッチするのが単一の引数であるなら,xにはf[e]ではなくeが使われる.
|