WOLFRAM言語チュートリアル

関数の定義

「ユーザ定義の関数」において,ユーザ定義の関数をどう作成するか説明した.関数fの定義は,f[x_]=x^2のように普通記述する.(「ユーザ定義の関数」での定義では,演算子=ではなく,演算子:=を使った.:==の演算子のどちらを使ったらよいかは,「即時的な定義と遅延的な定義」を参照すること.)

定義f[x_]=x^2は,Wolfram言語に対して,パターンf[x_]にマッチする式が現れるたびに,それをx^2に置換するよう指示する.パターンf[x_]は,f[anything]という形式を持つすべての式にマッチするので,この定義は任意の「引数」を持った関数fすべてに適用される.

f[x_]=x^2のような関数定義は,「添数付きオブジェクトの定義」で触れた添数付き変数に関するf[a]=bのような定義と比較することができる.f[a]=bは,特定の式f[a]が現れるたびに,それをbに置換するよう指示はするが,他の「添数」を持ったfが現れても(例えば,f[y])全く関知しない.

「関数」を定義するには,f[x]形の式に対して値を指定する必要がある.x は何でもよい.これは,どんな式でも表すパターンオブジェクトx_を持つパターンf[x_]に対して定義を与えることで行うことができる.

f[x]=value特定の式 x に対する定義
f[x_]=value参照名を x とした,任意の式に対する定義

添数付き変数の定義と関数の定義の違い

f[2]f[a]に関する定義を作成するということは,名前をfとした「配列」の要素に値を与える,ということに相当する.一方,f[x_]に関して定義を作ることは,任意の「添数」を持った「配列要素」の集合に対して値を与える,ということに相当する.実際,どのような関数でも,添数を任意の変数とした配列としてとらえることもできる.

数学では,fは1つの「写像(マップ)」としてとらえることができる.つまり,f[1]f[2]に対する値の定義とは,定義域の離散点に対応した写像による像を指定することになる.f[x_]に対して値を定義することは,点の連続体におけるfの像を指定することになる.

特定の式f[x]に対して変換規則を定義する.
In[1]:=
Click for copyable input
Out[1]=
f[x]uで置換される.f[argument]形式ではあるが他の式は変更されない.
In[2]:=
Click for copyable input
Out[2]=
これは,1つの「引数」として任意の式を持つfの値を定義する.
In[3]:=
Click for copyable input
Out[3]=
特定の式f[x]に対する古い定義がまだ使われるが,f[y]には,新たな一般化された定義f[x_]が使われその値が求められる.
In[4]:=
Click for copyable input
Out[4]=
fに割り当てられた値をすべて消去する.
In[5]:=
Click for copyable input

変換規則は,その適用先が式であってもパターンであっても定義することができる.また,f[1]f[a]のような特定の式に対する定義と,f[x_]等のパターンに対する定義を一緒に混ぜて使うこともできる.

Wolfram言語では,数学関数の多くは,特殊定義と一般定義を組み合せて使うことで構築することができる.例えば,階乗関数を考える.この関数は,すでにWolfram言語に組み込まれているが(n!と書く),Wolfram言語の定義を使うことでユーザ自身でも構築することができる.

階乗関数に関する標準的な数学定義は,f[n_]:=n f[n-1];f[1]=1とすることで,ほとんど直接的にWolfram言語に入力することができる.この定義は,n1以外の値のとき,f[n]n f[n-1]で置換され,さらに,n1,のとき,f[1]は単に1で置換されるものとする.

これは引数が1のときの階乗関数の値である.
In[6]:=
Click for copyable input
Out[6]=
階乗関数に必要な一般的な帰納的関係を与える.
In[7]:=
Click for copyable input
これらの定義を使い,階乗関数の値を見出すことができる.
In[8]:=
Click for copyable input
Out[8]=
結果は組み込まれている階乗関数から得られるものと同じである.
In[9]:=
Click for copyable input
Out[9]=
Translate this page: