|
1.7.2 手続きとしての関数
多くの計算問題で,同じ式を繰返しMathematicaにタイプしなければならない状況が起こるときがある.そのようなときは,入力のコマンドを含む関数を定義しておくことで何度も同じ式をタイプしなくても済むようになる.
3つの項を掛け合わせ,結果を展開する.
In[1]:= Expand[ Product[x + i, {i, 3}] ]
Out[1]= 
同じ処理を4つの項に対して行う.
In[2]:= Expand[ Product[x + i, {i, 4}] ]
Out[2]= 
これは,n項の乗積を計算し,展開する関数exprodを定義する.
In[3]:= exprod[n_] := Expand[ Product[ x + i, {i, 1, n} ] ]
関数が使われるたびに,乗積Productと展開Expandの両操作が実行される.
In[4]:= exprod[5]
Out[4]= 
ユーザ定義の関数は,本質的にはコマンドを実行するための「手続き(プロシージャ)」である.手続きには複数の計算ステップを記述することができる.区切りのため,ステップとステップの間にはセミコロン(;)を入れる.
関数全体の戻り値は,手続きの最後の式に対する結果である.関数をこのように定義するときは,丸カッコで手続きの部分をくくることに注意.
In[5]:= cex[n_, i_] := ( t = exprod[n]; Coefficient[t, x^i] )
手続きを実行する.
In[6]:= cex[5, 3]
Out[6]= 

手続きの構築
Mathematicaで手続きを記述するとき,手続き内で使う変数は局所的なものとして宣言しておくとよい.そうしておけば,変数が手続きの外で起こることと干渉することがなくなる.変数の局所化は,手続きをモジュールとして宣言することで行うことができる.
前の例で使った関数cexはモジュールとして定義されていない.したがって,tの値は「逃げて」しまい,関数が返った後も残ってしまう.
In[7]:= t
Out[7]= 
次に同じ計算をモジュールを使い定義してみる.tの代わりに局所変数uをモ ジュール内で定義しておく.
In[8]:= ncex[n_, i_] := Module[{u}, u = exprod[n]; Coefficient[u, x^i]]
返される結果は以前の関数と同じである.
In[9]:= ncex[5, 3]
Out[9]= 
ただし,今度は,uの値が「逃げない」ので,参照しても何も返されない.
In[10]:= u
Out[10]= 
|