組込み関数の変更
変換規則は,どのような式にでも定義することができる.ユーザ定義の関数だけに限らず,Mathematica に組込み済みの内部関数についても同様である.このため,変換規則を使い,組込み関数の機能を拡張したり,目的に合うように変更したりすることができる.
この機能は強力であるとともに危険性もはらんでいる.Mathematica は,与えられた規則をそのまま適用する.間違った規則が与えられると,Mathematica の答も間違ったものになってしまう.
誤入力による組込み関数の変更がないように,すべての組込み関数には「プロテクト(保護)」がかけられており,再定義ができないようになっている.このため,組込み関数に関して定義を与えるには,まず,この保護機能を解除する必要がある.そして,定義を与えた後には,将来の誤入力を防ぐために再度保護機能を有効にしておく.
関数の保護・解除
Log等の組込み関数は通常「プロテクト」されているので,再定義はできない.
| Out[1]= |  |
| Out[2]= |  |
これで
Logに対して自分の定義が与えられるようになった.数学的には間違いだが,それでも,定義はできてしまう.
| Out[3]= |  |
| Out[4]= |  |
| Out[6]= |  |
ユーザ指定の定義は,Mathematica の組込み機能を上書きしてしまう.また,ユーザの定義は,通常,組込み定義より先に使われる.
Mathematica に組込み済みの規則は,なるべく多くの計算問題に対応できるように作られている.それでも,問題が非常に特殊なものだと,組込み定義ではユーザの使いたい特別な計算手法に対応できない場合も出てくる.そのようなときは,ユーザ自身で特別な規則を構築し,組込み規則を上書きしておく.
Exp[Log[expr]]を簡約するための組込み関数がある.
| Out[7]= |  |
ここでは,
Exp[Log[expr]]に対するカスタムの定義を作り,組込み規則は上書きする.
| Out[9]= |  |