|
2.5.6 関数の定義
1.7.1において,ユーザ定義の関数をどう作成するか説明した.関数fの定義は, f[x_] = x^2のように普通記述する.(1.7.1での定義では,演算子 =ではなく,演算子 :=を使った.いつ,2つの演算子のどちらを使ったらよいかは,2.5.8を参照すること.)
定義 f[x_] = x^2は, Mathematicaに対して,パターン f[x_]にマッチする式が現れるたびに,それを x^2に置換するよう指示する.ただし,パターン f[x_]は,任意の「引数」を持った関数ならどれにでも適用される.
f[x_] = x^2のような関数定義は,前節で触れた添数付き変数に関する f[a] = bのような定義と比較することができる.後者は,特定の式 f[a]が現れるたびに,それを bに置換するよう指示はするが,他の「添数」を持った fが現れても(例えば, f[y])全く関知しない.
「関数」を定義するには, f[x]形の式に対して値を指定する必要がある. xは何でもよい.これは,どんな式でも表すパターンオブジェクトx_を持つパターン f[x_]に対して定義を与えることで行うことができる.

添数付き変数の定義と関数の定義の違い
f[2]や f[a]に関する定義を作成するということは,名前を fとした「配列」の要素に値を与える,ということに相当する.一方, f[x_]に関して定義を作ることは,任意の「添数」を持った「配列要素」の集合に対して値を与える,ということに相当する.実際,どのような関数でも,添数を任意の変数とした配列としてとらえることもできる.
数学では, fは1つの「写像(マップ)」としてとらえることができる.つまり, f[1]と f[2]に対する値の定義とは,定義域の離散点に対応した写像による像を指定することになる. f[x_]に対して値を定義することは,点の連続体における fの像を指定することになる.
特定の式 f[x]に対して変換規則を定義 する.
In[1]:= f[x] = u
Out[1]= 
式 f[x]は uで置換される. f[argument]形式ではあるが他の式は変更されない.
In[2]:= f[x] + f[y]
Out[2]= 
これは,1つの「引数」として任意の式を持つ fの値を定義する.
In[3]:= f[x_] = x^2
Out[3]= 
特定の式 f[x]に対する古い定義がまだ使われるが, f[y]には,新たな一般化された定義 f[x_]が使われその値が求められる.
In[4]:= f[x] + f[y]
Out[4]= 
fに割り当てられた値をすべて消去する.
In[5]:= Clear[f]
変換規則は,その適用先が式であってもパターンであっても定義することができる.また, f[1]や f[a]のような特定の式に対する定義と, f[x_]等のパターンに対する定義を一緒に混ぜて使うこともできる.
Mathematicaでは,数学関数の多くは,特殊定義と一般定義を組み合せて使うことで構築することができる.例えば,階乗関数を考える.この関数は,すでに Mathematicaに組み込まれているが(n!と書 く), Mathematicaの定義を使うことでユーザ自身でも構築することができる.
階乗関数に関する標準的な数学定義は,f[n_] := n f[n-1]; f[1] = 1とすることで,ほとんど直接的に Mathematicaに入力することができる.この定義は, nが 1以外の値のとき, f[n]は n f[n-1]で置換され,さらに,n = 1のとき, f[1]は単に 1で置換されるものとする.
引数が1のときに階乗関数が取る値を与 える.
In[6]:= f[1] = 1
Out[6]= 
階乗関数に必要な一般的な帰納的関係を与える.
In[7]:= f[n_] := n f[n-1]
これらの定義を使い,階乗関数の値を見出すことができる.
In[8]:= f[10]
Out[8]= 
結果は組み込まれている階乗関数から得られるものと同じである.
In[9]:= 10!
Out[9]= 
|