モジュールと局所変数

Wolfram言語では,ユーザ定義の変数は通常大域的なものとみなされる.このため,同じ名前,例えば,が入力されるたびに,それは同一のオブジェクトを参照するためのものとされる.

しかし,特にプログラムの記述においては,必ずしもすべての変数を大域的なものとはしたくないことがある.例えば,同じの名前を使い,2つのプログラムにある別々の2つの変数を参照したいかもしれない.このようなときは,を各プログラムにおいて局所変数として扱われるようにしておく必要がある.

Wolfram言語では,モジュールを使うことで局所変数の定義を行うことができる.モジュールの中に与えられた変数は,モジュール内だけで有効な局所変数として扱われる.

Module[{x,y,},body]局所変数 x, y, を備えたモジュール

モジュールの作成

大域変数への値17の割当てを定義する.
In[1]:=
Click for copyable input
Out[1]=
モジュール中のは局所化されている.このため,先に作った大域変数のとは独立に扱うことができる.
大域なの値は17のままである.
In[3]:=
Click for copyable input
Out[3]=

モジュールの最も一般的な使いみちは,定義したい関数の中で一時的(臨時的)な変数を設けることである.そのような変数はモジュール内だけで有効な局所変数にしておくことが重要である.局所変数にしておかないと,同じ参照名を持つ変数が外部にある場合,競合してしまい思いも寄らない間違いを引き起してしまう.

臨時変数はモジュールに局所になるように指定される.
In[4]:=
Click for copyable input
関数を実行させる.
In[5]:=
Click for copyable input
Out[5]=
大域変数の値は17のままである.
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]=

あるモジュールで局所変数が設けられるとき,Wolfram言語はその変数に対しての値の割当ては行わない.このため,モジュールの外に同じ名前の大域変数がすでにあったとしても,それを純粋なシンボルとして使うことができる.

上の例で定義したの大域値が使われる.このため,ある数が返される.
In[10]:=
Click for copyable input
Out[10]=
ここで,Lengthは単に1つの数を引数として受け取る.
In[11]:=
Click for copyable input
Out[11]=
局所変数には値が割り当てられていないので,シンボルとして扱われる.このため,Expandは,想定された代数式的な結果を生成する.
In[12]:=
Click for copyable input
Out[12]=
Module[{x=x0,y=y0,},body]モジュールの局所変数に初期値を割り当てる

局所変数の初期化

を局所変数とし,初期値を割り当てる.
In[13]:=
Click for copyable input
の定義を使う.
In[14]:=
Click for copyable input
Out[14]=

初期値の定義はモジュールのどの局所変数に対してでも行うことができる.初期値は常にモジュールが実行される前に評価される.このため,モジュールに対して局所的に定義された変数があっても,名前がある初期値の設定を行うための式に現れるときは,大域のが使われる.

の初期値はの大域値とされる.
In[15]:=
Click for copyable input
Out[15]=
lhs:=Module[vars,rhs/;cond]右辺 rhs と条件式 cond の間で局所変数を共有する

条件付き定義における局所変数の使用

ある定義に対して条件式を設ける際は,一時的な変数を導入する必要がよく出てくる.多くの場合は,一時変数を定義の右辺にある本体式とで共有できるようにしたい.このような共有を行うには,条件式を含める形で定義の右辺をモジュールの角カッコに入れておく.

関数を条件付きで定義する.
In[16]:=
Click for copyable input
局所変数の値は,条件式と右辺の本体式で共有される.
In[17]:=
Click for copyable input
Out[17]=