Mathematica では,任意の変換のための規則として,非常に一般的な関数の概念を持っている.変数に対する値も同様の形で割り当てられる.変数に値を設定すると,その変数はその値に対する記号となる.
以下は簡単な変換規則である.「
xがあるといつもそれを3で置き換える」という規則である.
| Out[1]= |  |
式を評価するときにはいつも
xは3で置き換えられる:
| Out[2]= |  |
この規則は,新しい規則を定義することによって削除することができる:
| Out[3]= |  |
新しい規則は,「
xがあると必ずそれを
y^2で置き換える」というものである.これまでのところ
yに関連する規則はないので,その値はそのままである.
| Out[4]= |  |
xを評価すると,
xについての規則によって
xは
y^2に置き換えられ,
yについての規則によって
yは4で置き換えられるため,結果は
4^2,つまり16となる:
| Out[5]= |  |
| Out[6]= |  |
| Out[7]= |  |
| Out[8]= |  |
yは既に値3を割り当てられているため,ここで定義される規則は 「
zを9で置き換える」であって,「
zを
y^2で置き換える」ではない.つまり
zは
yに依存しない:
| Out[9]= |  |
| Out[10]= |  |
このことが起るのは,
= (
Set)を使って規則が定義される場合,規則が定義される前に右辺が評価されるからである.
規則は,以下のように
:= (
SetDelayed)を使って定義することもできる:
規則が
:=を使って定義される場合には,規則が定義される前に右辺が評価されるということはない.したがって
yが既に値を持つ場合でも,この規則では「
zがあると必ずそれを
y^2で置き換える」と言っていることになる.このため,
zは
yに依存している:
| Out[12]= |  |
| Out[13]= |  |
| Out[14]= |  |
Mathematica の関数は,パターンに作用する規則によって定義されている.以下は簡単な例である:
f[x_]は,
x_が任意の式(これは名前
xで右辺に表示されるものである)を表すパターンである.これは「任意の式の
fがある場合は,それをその式を平方したもので置き換える」という規則である:
| Out[16]= |  |
| Out[17]= |  |
| Out[19]= |  |
関数を定義する場合は必ず
:=を使わなくてはならない.さもなければ,右辺の変数は規則が定義される前に評価されるので,これらの変数が左辺の関連する式を表さないことがある:
| Out[20]= |  |
xが9で
yが3であるため,それが起った.この規則では「パターン
h[x_, y_]にマッチするものは何でも90で置き換える」と言っている:
| Out[21]= |  |