変換規則の適用

expr/.lhs->rhs変換規則を式 expr に適用する
expr/.{lhs1->rhs1,lhs2->rhs2,}複数の変換規則を式 expr に適用する

変換規則の適用法

置換演算子(「スラッシュ・ドット」と読む)を使うことで,規則を式に適用することができる.
In[1]:=
Click for copyable input
Out[1]=
規則はリスト形式で適用することができる.各規則が一度ずつ各式に試される.
In[2]:=
Click for copyable input
Out[2]=
expr/.{rules1,rules2,}各規則 を式 expr に適用し,その結果をリスト形式で列挙する

変換規則リストの適用

規則をリストのリストの形で与えると,結果はリストとして得られる.
In[3]:=
Click for copyable input
Out[3]=
SolveNSolve等の組込み関数は,要素を規則のリストとしたリストを返す.各規則は解を表している.
In[4]:=
Click for copyable input
Out[4]=
これらの規則を適用すると,各解に対応した結果がリスト形式で得られる.
In[5]:=
Click for copyable input
Out[5]=

書式 を使い複数の規則を適用すると,各規則は式 expr の各部分に代る代る試される.ある規則が適用されると直ちに,それに対応した変換が施され,変形された該当部分が返される.

の規則がまず試される.それが適用できなければベキの規則が使われる.
In[6]:=
Click for copyable input
Out[6]=
規則が適用されると結果は即座に返される.このため,内側のは置換されない.
In[7]:=
Click for copyable input
Out[7]=

による変換操作では,各規則は式 expr の各部分に一度だけ試される.

各規則は一度しか適用されない.そのため,これはを入れ替える働きをする.
In[8]:=
Click for copyable input
Out[8]=
この記述を使うことで,最初に規則のセットを適用し,続いて別のセットを適用することができる.
In[9]:=
Click for copyable input
Out[9]=

ときには,式に変化がなくなるまで,繰返し規則を適用しなければならないことがある.これを行うには,書式 による繰返し置換操作,または,組込み関数ReplaceRepeated[expr,rules]を使う.

expr/.rulesexpr の部分ひとつひとつに規則を一度だけ適用する
expr//.rules式部分ひとつひとつに規則を繰り返し適用し,変化がなくなった時点で停止する

規則を一度だけ適用する方法と繰り返し適用する方法

1回だけ置換演算子を使うと,各規則は式の各部分に対して一度だけ試行される.
In[10]:=
Click for copyable input
Out[10]=
これに対して,繰返し置換演算子を使えば,式に変化がなくなるまで規則は繰り返し試行される.
In[11]:=
Click for copyable input
Out[11]=
この規則は一度しか適用されない.
In[12]:=
Click for copyable input
Out[12]=
繰返し置換演算子を使ったので,今度は,結果が変わらなくなるまで規則が繰り返し適用される.
In[13]:=
Click for copyable input
Out[13]=

(「スラッシュ・スラッシュ・ドット」と読む)が使われると,Wolfram言語は式を繰り返し操作しながら与えられた各規則を適用していく.この操作は,全く同じ結果が続けて得られるまで繰り返される.

循環してしまうような規則の組合せを与えると,いつまでたってもの置換操作が終らなくなってしまう.実際には,による特定の式に対して繰り返される操作の最大回数は,オプションMaxIterationsの現行値で決定される.繰返しを何回でもできるようにしたければ,ReplaceRepeated[expr,rules,MaxIterations->Infinity]を使う.そうした場合でも,Wolfram言語を手動で中断すれば操作をいつでも停止することができる.

繰返しの上限(MaxIterations)を再設定することで,ReplaceRepeatedに対して式の操作を何回まで許可するかを指定することができる.
In[14]:=
Click for copyable input
Out[14]=

2つの置換演算子は,ともに,式の各部分に対して各規則を試行していく,という同じ機能を持つ.これに対して,Replace[expr,rules]は,式 expr 全体に対して規則を適用するが,式の各部分には適用しない.

それでも,ReplaceMapMapAt等の他の関数と組み合せて使うことで,置換の対象になる式の部分を確実に限定することができる.また,別の節ですでに触れたが,関数ReplacePart[expr,new,pos]でも,指定されたオブジェクトによる式の部分的置換を行うことができる.

演算子を使うと,規則は式のすべての部分に適用される.
In[15]:=
Click for copyable input
Out[15]=
これに対して,レベル指定をせずにReplaceを使うと,規則は式全体にだけ適用される.
In[16]:=
Click for copyable input
Out[16]=
この例は,何も置換されない.
In[17]:=
Click for copyable input
Out[17]=
規則をレベル2まで適用することで,は置換される.
In[18]:=
Click for copyable input
Out[18]=
expr/.rulesexpr の各部分に規則を適用する
Replace[expr,rules]expr 全体に規則を適用する
Replace[expr,rules,levspec]levspec で指定されたレベルに対応する式 expr の部分式に規則を適用する

式全体への規則の適用

Replaceは,最初に適用された規則による結果を返す.
In[19]:=
Click for copyable input
Out[19]=
ReplaceListは,適用される各規則の結果をリスト形式ですべて返す.
In[20]:=
Click for copyable input
Out[20]=
規則を複数の方法で適用することができるならば,ReplaceListはすべての結果をリストで返す.
In[21]:=
Click for copyable input
Out[21]=
これは,もとのリストを2分割するための仕分け方をリスト形式で返す.
In[22]:=
Click for copyable input
Out[22]=
これは,同一要素が両側に置かれたすべてのサブリストを検索する.
In[23]:=
Click for copyable input
Out[23]=
Replace[expr,rules]一度だけ規則 rules を適用する
ReplaceList[expr,rules]並び順を可能な限り変化させ規則 rules を適用する

規則の一度限りの適用と並び順変更による複数回の適用