パターンと変換規則

パターン

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

_任意の式を表すパターン
x_任意の式を表すパターン.抽出された式には名前 x が付けられる
x:pattern名前を x とするパターン
pattern?testtest を適用し,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判定条 condTrueとする式を表すパターン
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]が関数 f の引数として存在するときに有効なデフォルト値を指定する
Default[f,n]n 番目の引数として存在するときに有効なデフォルト値を指定する(n が負のときには末尾から数える)
Default[f,n,tot]引数が全部で tot 個あるとき,n 番目の引数のデフォルト値を指定する

Default値の設定

のようなパターンは,さまざまな, , の組合せで等とマッチする.このようなときは,まず,が最小になるような組合せが試される.一般に,単一の関数に複数のが使われている場合,最後尾にあるものを除いた,すべてのが最も短くなるような組合せが使用され,最後尾のパターンに残りがマッチする.

があるときは,どの引数も省略されていないという仮定のもとに関数の検索が行われる.その後で,後寄りの引数が省略されているとして検索が行われる.

異なる組合わせを試す順番はShortestあるいはLongestを使って変更できる.

Orderlessが同値であるとみなす
Flatが同値であるとみなす
OneIdentityx が同値であるとみなす

パターンマッチングで使われる属性

のようなパターンオブジェクトは,属性Flatを備えた関数 f のどんな引数の列でも表せる.この場合,x の値は引数に f を適用したものになる.fOneIdentityの属性を持ち,x がマッチするのが単一の引数であるなら,x には ではなく e が使われる.

割当て

lhs=rhs即時型の割当て:割当て時に右辺 rhs が評価される
lhs:=rhs遅延型の割当て:左辺 lhs の値が参照されるときに右辺 rhs が評価される

Wolfram言語における2つの割当て式の基本型

割当てとは,式に対して変換規則を指定することである.割当て操作は必ず特定のシンボルに関して設けられる.

f[args]=rhsf に関する割当て(下向き)
t/:f[args]=rhst に関する割当て(上向き)
f[g[args]]^=rhsg に関する割当て(上向き)

シンボルの種類に応じた割当ての仕方

のような割当て式を入力すると,f がまず検査され,次に f の頭部が,その次に引数の頭部が,というように割当て式を関連付けするシンボルが見付かるまで検査が続けられる.

一方, のような割当て式を入力すると,左辺 lhs の引数として与えられたシンボルか,または lhs の引数の頭部に対して変換規則が設けられる.

シンボル s に関連付けられた変換規則は,決められた並び順で内部保管され,また,その順序に従い規則が適用される.新たな割当て定義を行うと,対応する変換規則は s 関連の変換規則リストの末尾に加えられることになっている.ただし,次の場合はその限りではない.

  • 変換規則式の左辺が定義済みリストにある変換規則に等しく,かつ,右辺にによる条件があれば,それも等しいとき.この場合,新しい変換規則は古い規則と入れ替えられる.
  • 新たな変換規則がすでに登録済みの古い規則より,より具体的な内容を備えており,また,古い規則の後に置かれたなら使われることがない,とWolfram言語が判断したとき.この場合,新規の規則は古い規則の手前に置かれる.ある規則が他の規則に比べてより具体的かどうかが判別できないときがよくあるが,そのような場合には,新しい規則は常にリストの最後に置かれる.

値の型

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,] についてのすべての値を消去し,名前も除去する

オブジェクトの消去と除去

ClearClearAllRemoveでは,引数はシンボル,もしくは文字列としてのシンボルの名前として与える.文字列の引数にメタ文字の*および@を入れて,パターンにマッチする名前のシンボルに対するアクションを指定することができる.

ClearClearAllRemoveは属性Protectedを持つシンボルに対しては何も行わない.

変換規則

lhs->rhs即時型の置換:規則式が入力された時点で右辺 rhs が評価される
lhs:>rhs遅延型の置換:規則が適用された時点で右辺 rhs が評価される

Wolfram言語における2つの変換規則の基本型

変換規則に現れるパターン変数に対する置換操作は,ReplaceAll(または,演算子)を使い行われる.