パターンと変換規則

パターン
ある分類に属す式を表すものをパターンと呼ぶ.パターンは特定の種類の式を表すパターンオブジェクトを含んでいる.
_
任意の式を表すパターン
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,]
パターンの列
OrderlessPatternSequence[p1,p2,]
パターンの任意順の列
KeyValuePattern[{key1val1,}]
ペア keyivali の任意順の列
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|
パターン patterni のどれかにマッチするような式を表すパターン
pattern/;cond
判定条 condTrueとする式を表すパターン
HoldPattern[pattern]
評価しないまま使用するパターン
Verbatim[expr]
与えた通りにマッチする式を表すパターン
OptionsPattern[]
一連のオプション
Longest[pattern]
pattern からなる最長の文字列
Shortest[pattern]
pattern からなる最短の文字列
Patternオブジェクト
複数の同じ名前を持ったパターンオブジェクトが1つのパターン内に存在するとき,それらのオブジェクトはすべて同一の式を指していなければならない.つまり,f[x_,x_]ではf[2,2]は表せるが,f[2,3]は表せない.
_h 等のパターンオブジェクトにおいて,頭部 h はどのような式でもよいが,パターンであってはならない.
x__等のパターンオブジェクトは式の列を表す.例えば,式f[a,b,c]はパターンf[x__]で表せる.そのとき,xSequence[a,b,c]になる.パターンで抽出した後にxを変換規則で使用したなら,規則にあるxに列が代入され,関数中の他の引数と一緒にされる.例えば,g[u,x,u]の式はg[u,a,b,c,u]になる.
関数の引数においてパターンオブジェクトx_:vx_.は,省略可能な引数を表す.x_:v 形式の引数が省略されたときは,x には値 v が使用される.x_.形式の引数が省略されるときは,x には関数に関連付けられているデフォルト値が取られる.このデフォルト値はDefault[f]の書式を使って設定できる.
Default[f]
x_.が関数 f の引数として存在するときに有効なデフォルト値を指定する
Default[f,n]
x_.n 番目の引数として存在するときに有効なデフォルト値を指定する(n が負のときには末尾から数える)
Default[f,n,tot]
引数が全部で tot 個あるとき,n 番目の引数のデフォルト値を指定する
Default値の設定
f[x__,y__,z__]のようなパターンは,さまざまなx, y, zの組合せでf[a,b,c,d,e]等とマッチする.このようなときは,まず,xyが最小になるような組合せが試される.一般に,単一の関数に複数の_____が使われている場合,最後尾にあるものを除いた,すべての_____が最も短くなるような組合せが使用され,最後尾のパターンに残りがマッチする.
x_:vx_.があるときは,どの引数も省略されていないという仮定のもとに関数の検索が行われる.その後で,後寄りの引数が省略されているとして検索が行われる.
異なる組合わせを試す順番はShortestあるいはLongestを使って変更できる.
Orderless
f[x,y]f[y,x]が同値であるとみなす
Flat
f[f[x],y]f[x,y]が同値であるとみなす
OneIdentity
f[x]x が同値であるとみなす
パターンマッチングで使われる属性
x_のようなパターンオブジェクトは,属性Flatを備えた関数 f のどんな引数の列でも表せる.この場合,x の値は引数に f を適用したものになる.fOneIdentityの属性を持ち,x がマッチするのが単一の引数であるなら,x には f[e]ではなく e が使われる.
割当て
lhs=rhs
即時型の割当て:割当て時に右辺 rhs が評価される
lhs:=rhs
遅延型の割当て:左辺 lhs の値が参照されるときに右辺 rhs が評価される
Wolfram言語における2つの割当て式の基本型
割当てとは,式に対して変換規則を指定することである.割当て操作は必ず特定のシンボルに関して設けられる.
f[args]=rhs
f に関する割当て(下向き)
t/:f[args]=rhs
t に関する割当て(上向き)
f[g[args]]^=rhs
g に関する割当て(上向き)
シンボルの種類に応じた割当ての仕方
f[args]=rhs のような割当て式を入力すると,f がまず検査され,次に f の頭部が,その次に引数の頭部が,というように割当て式を関連付けするシンボルが見付かるまで検査が続けられる.
一方,lhs^=rhs のような割当て式を入力すると,左辺 lhs の引数として与えられたシンボルか,または lhs の引数の頭部に対して変換規則が設けられる.
シンボル s に関連付けられた変換規則は,決められた並び順で内部保管され,また,その順序に従い規則が適用される.新たな割当て定義を行うと,対応する変換規則は s 関連の変換規則リストの末尾に加えられることになっている.ただし,次の場合はその限りではない.
値の型
Attributes[f]
f の持つ属性
DefaultValues[f]
f の引数に与えるデフォルト値
DownValues[f]
f[] , f[][] , 等の値
FormatValues[f]
f に関連した出力用表記
Messages[f]
f に関連したメッセージ
NValues[f]
f に関連した数値
Options[f]
f に関連したオプションのデフォルト値
OwnValues[f]
f そのものの値
UpValues[f]
[,f[],]の値
シンボルに関連付けられている各種の値
オブジェクトの消去と除去
expr=.
expr に定義してある値を消去
f/:expr=.
expr に定義してある f に関する値を消去
Clear[s1,s2,]
シンボル si について,属性,メッセージ,デフォルト値を除いたすべての値を消去
ClearAll[s1,s2,]
シンボル si について,属性,メッセージ,デフォルト値を含めたすべての値を消去
Remove[s1,s2,]
si についてのすべての値を消去し,名前も除去する
オブジェクトの消去と除去
ClearClearAllRemoveでは,引数はシンボル,もしくは文字列としてのシンボルの名前として与える.文字列の引数にメタ文字の*および@を入れて,パターンにマッチする名前のシンボルに対するアクションを指定することができる.
ClearClearAllRemoveは属性Protectedを持つシンボルに対しては何も行わない.
変換規則
lhs->rhs
即時型の置換:規則式が入力された時点で右辺 rhs が評価される
lhs:>rhs
遅延型の置換:規則が適用された時点で右辺 rhs が評価される
Wolfram言語における2つの変換規則の基本型
変換規則に現れるパターン変数に対する置換操作は,ReplaceAll(または,演算子/.)を使い行われる.