定義の適用順
定義の列を Mathematica で作ると,それらの定義は他の定義より,より一般的な定義であることがある.Mathematica は,一般定義は特殊な定義よりも後回しにされる,という原則に従っている.このため,規則の特殊ケースは,より一般的なケースより先に試される.
この動作は,「関数の定義」の例で示した階乗関数で決定的な役割を果たす.つまり,規則の入力された順序に関係なしに,Mathematica は,
の特殊ケースの規則を
用の一般則の前に置く.このため,Mathematica がf[n]形のある式の値を探すときは,
の特殊ケースを最初に試し,それが適用しない場合に限って,一般ケースである
を試す.その結果,
の値が要求されると,Mathematica は,
に対応した「最終条件」が適用できるようになるまで,一般則を繰り返し使う.
もしも特殊則を一般則の前に使うという原則が守られなかったら,特殊則はより一般的な規則で常に「隠され」てしまう.上記の階乗の例で,もし
用の規則が
の規則より優先されたなら,Mathematica が
を評価しようとするときも,
の一般則が適用されてしまい,
の特殊則がいつまでたっても使われないという状況に陥ってしまう.
| In[1]:= |
| In[2]:= |
| Out[2]= |
上記の階乗関数の例では,どちらの規則がより一般的なものかがはっきりしている.しかし,与えられる規則にはっきりした適用順序を見出すことができないことがよくある.そのようなときは,Mathematica は,単純に入力された順序通りに規則を適用していく.
| In[4]:= |
| In[6]:= |
Mathematica は,多くの実践的なケースでは,いつある規則が他の規則より,より一般的であるかを認識することができるが,どんな場合でもそうかというとそうではない.例えば,2つの規則がともに
による複雑な条件を含むとき,どちらがより一般的かは判断することが極めて困難である.決まった順序はないかもしれない.順序を判断できないとき,Mathematica は与えられた通りの順序で規則を保管する.
