パターンと変換規則
_ | 任意の式を表すパターン |
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 に従って繰り返されるパターン |
pattern1pattern2… | パターン patterni のどれかにマッチするような式を表すパターン |
pattern/;cond | 判定条 cond をTrueとする式を表すパターン |
HoldPattern[pattern] | 評価しないまま使用するパターン |
Verbatim[expr] | 与えた通りにマッチする式を表すパターン |
OptionsPattern[] | 一連のオプション |
Longest[pattern] | pattern からなる最長の文字列 |
Shortest[pattern] | pattern からなる最短の文字列 |
Patternオブジェクト
複数の同じ名前を持ったパターンオブジェクトが1つのパターン内に存在するとき,それらのオブジェクトはすべて同一の式を指していなければならない.つまり,f[x_,x_]ではf[2,2]は表せるが,f[2,3]は表せない.
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]の書式を使って設定できる.
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]等とマッチする.このようなときは,まず,x,yが最小になるような組合せが試される.一般に,単一の関数に複数の__や___が使われている場合,最後尾にあるものを除いた,すべての__や___が最も短くなるような組合せが使用され,最後尾のパターンに残りがマッチする.
Orderless | f[x,y]と f[y,x]が同値であるとみなす |
Flat | f[f[x],y]と f[x,y]が同値であるとみなす |
OneIdentity | f[x]と x が同値であるとみなす |
x_のようなパターンオブジェクトは,属性Flatを備えた関数 f のどんな引数の列でも表せる.この場合,x の値は引数に f を適用したものになる.f がOneIdentityの属性を持ち,x がマッチするのが単一の引数であるなら,x には f[e]ではなく e が使われる.
シンボル s に関連付けられた変換規則は,決められた並び順で内部保管され,また,その順序に従い規則が適用される.新たな割当て定義を行うと,対応する変換規則は s 関連の変換規則リストの末尾に加えられることになっている.ただし,次の場合はその限りではない.
- 変換規則式の左辺が定義済みリストにある変換規則に等しく,かつ,右辺に/;による条件があれば,それも等しいとき.この場合,新しい変換規則は古い規則と入れ替えられる.
- 新たな変換規則がすでに登録済みの古い規則より,より具体的な内容を備えており,また,古い規則の後に置かれたなら使われることがない,とWolfram言語が判断したとき.この場合,新規の規則は古い規則の手前に置かれる.ある規則が他の規則に比べてより具体的かどうかが判別できないときがよくあるが,そのような場合には,新しい規則は常にリストの最後に置かれる.
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 についてのすべての値を消去し,名前も除去する |
Clear,ClearAll,Removeでは,引数はシンボル,もしくは文字列としてのシンボルの名前として与える.文字列の引数にメタ文字の*および@を入れて,パターンにマッチする名前のシンボルに対するアクションを指定することができる.