変換規則の適用
| expr/.lhs->rhs | 変換規則を式expr に適用する |
| expr/.{lhs1->rhs1,lhs2->rhs2,...} | 複数の変換規則を式expr に適用する |
変換規則の適用法
置換演算子 /.(スラッシュ・ドットと読む)を使うことで,規則を式に適用することができる.
| Out[1]= |  |
|
規則はリスト形式で適用することができる.各規則が一度ずつ各式に試される.
| Out[2]= |  |
|
| expr/.{rules1,rules2,...} | 各規則rulesi を式expr に適用し,その結果をリスト形式で列挙する |
変換規則リストの適用
規則をリストのリストの形で与えると,結果はリストとして得られる.
| Out[3]= |  |
|
| Out[4]= |  |
|
これらの規則を適用すると,各解に対応した結果がリスト形式で得られる.
| Out[5]= |  |
|
書式
expr/.rules を使い複数の規則を適用すると,各規則は式
expr の各部分に代る代る試される.ある規則が適用されると直ちに,それに対応した変換が施され,変形された該当部分が返される.
x^3の規則がまず試される.それが適用できなければベキの規則 x^n_が使われる.
| Out[6]= |  |
|
規則が適用されると結果は即座に返される.このため,内側の hは置換されない.
| Out[7]= |  |
|
expr/.rules による変換操作では,各規則は式
expr の各部分に一度だけ試される.
各規則は一度しか適用されない.そのため,これは xと yを入れ替える働きをする.
| Out[8]= |  |
|
この記述を使うことで,最初に規則のセットを適用し,続いて別のセットを適用することができる.
| Out[9]= |  |
|
ときには,式に変化がなくなるまで,繰返し規則を適用しなければならないことがある.これを行うには,書式
expr//.rules による繰返し置換操作,または,組込み関数
ReplaceRepeated[expr, rules]を使う.
| expr/.rules | 式expr の部分ひとつひとつに規則を一度だけ適用する |
| expr//.rules | 式部分ひとつひとつに規則を繰り返し適用し,変化がなくなった時点で停止する |
規則を一度だけ適用する方法と繰り返し適用する方法
1回だけ置換演算子 /.を使うと,各規則は式の各部分に対して一度だけ試行される.
| Out[10]= |  |
|
これに対して,繰返し置換演算子 //.を使えば,式に変化がなくなるまで規則は繰り返し試行される.
| Out[11]= |  |
|
| Out[12]= |  |
|
繰返し置換演算子を使ったので,今度は,結果が変わらなくなるまで規則が繰り返し適用される.
| Out[13]= |  |
|
//.(スラッシュ・スラッシュ・ドットと読む)が使われると,
Mathematica は式を繰り返し操作しながら与えられた各規則を適用していく.この操作は,全く同じ結果が続けて得られるまで繰り返される.
循環してしまうような規則の組合せを与えると,いつまでたっても
//.の置換操作が終らなくなってしまう.実際には,
//.による特定の式に対して繰り返される操作の最大回数は,オプション
MaxIterationsの現行値で決定される.繰返しを何回でもできるようにしたければ,
ReplaceRepeated[expr, rules, MaxIterations->Infinity]を使う.そうした場合でも,
Mathematica を手動で中断すれば操作をいつでも停止することができる.
| Out[14]= |  |
|
2つの置換演算子
/.と
//.は,ともに,式の各部分に対して各規則を試行していく,という同じ機能を持つ.これに対して,
Replace[expr, rules]は,式
expr 全体に対して規則を適用するが,式の各部分には適用しない.
それでも,
Replaceを
Mapや
MapAt等の他の関数と組み合せて使うことで,置換の対象になる式の部分を確実に限定することができる.また,別の節ですでに触れたが,関数
ReplacePart[expr, new, pos]でも,指定されたオブジェクトによる式の部分的置換を行うことができる.
演算子 /.を使うと,規則は式のすべての部分に適用される.
| Out[15]= |  |
|
これに対して,レベル指定をせずに Replaceを使うと,規則は式全体にだけ適用される.
| Out[16]= |  |
|
| Out[17]= |  |
|
規則をレベル2まで適用することで, xは置換される.
| Out[18]= |  |
|
| expr/.rules | 式expr の各部分に規則を適用する |
| Replace[expr,rules] | 式expr 全体に規則を適用する |
| Replace[expr,rules,levspec] | levspec で指定されたレベルに対応する式expr の部分式に規則を適用する |
式全体への規則の適用
| Out[19]= |  |
|
| Out[20]= |  |
|
| Out[21]= |  |
|
これは,もとのリストを2分割するための仕分け方をリスト形式で返す.
| Out[22]= |  |
|
これは,同一要素が両側に置かれたすべてのサブリストを検索する.
| Out[23]= |  |
|
規則の一度限りの適用と並び順変更による複数回の適用