Mathematica 9 is now available

Documentation / Mathematica / Mathematicaブック / Mathematicaの仕組み / 変換規則と定義 /

2.5.12 組込み関数の変更

変換規則は,どのような式にでも定義することができる.ユーザ定義の関数だけに限らず, Mathematicaに組込み済みの内部関数についても同様である.このため,変換規則を使い,組込み関数の機能を拡張したり,目的に合うように変更したりすることができる.

この機能は強力であるとともに危険性もはらんでいる. Mathematicaは,与えられた規則をそのまま適用する.間違った規則が与えられると, Mathematicaの答も間違ったものになってしまう.

誤入力による組込み関数の変更がないように,すべての組込み関数には「プロテクト(保護)」がかけられており,再定義ができないようになっている.このため,組込み関数に関して定義を与えるに は,まず,この保護機能を解除する必要がある.そして,定義を与えた後には,将来の誤入力を防ぐために再度保護機能を有効にしておく.

関数の保護・解除

Log等の組込み関数は通常「プロテクト」されているので,再定義はできない.

In[1]:= Log[7] = 2

Out[1]=

組込み関数 Logのプロテクトを解除する.

In[2]:= Unprotect[Log]

Out[2]=

数学的には間違いだが,それでも,定義はできてしまう.

In[3]:= Log[7] = 2

Out[3]=

定義が間違っていても,そのまま使われてしまう.

In[4]:= Log[7] + Log[3]

Out[4]=

Logの正しくない定義を取り除く.

In[5]:= Log[7] =.

Logをプロテクトし直す.

In[6]:= Protect[Log]

Out[6]=

ユーザ指定の定義は, Mathematicaの組込み機能を上書きしてしまう.また,ユーザの定義は,通常,組込み定義より先に使われる.

Mathematicaに組込み済みの規則は,なるべく多くの計算問題に対応できるように作られている.それでも,問題が非常に特殊なものだと,組込み定義ではユーザの使いたい特別な計算手法に対応できない場合も出てくる.そのようなときは,ユーザ自身で特別な規則を構築し,組込み規則を上書きしておく.

Exp[Log[expr]]を簡約するための組込み関数がある.

In[7]:= Exp[Log[y]]

Out[7]=

しかし,ここでは,カスタムの定義を作り,組込み規則は上書きしておく.

In[8]:= (
Unprotect[Exp] ;
Exp[Log[expr_]] := explog[expr] ;
Protect[Exp] ;
)

新定義が使われ,組込み定義は無視される.

In[9]:= Exp[Log[y]]

Out[9]=



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.