Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica >

ブロックとモジュールの比較

Mathematicaでプログラムを記述するとき,構成部分(計算式等)をなるべく独立した形で書くことが大切である.各部分を独立させて書くことで,保守や補修がやりやすいプログラムを構築することができる.
独立型のプログラムを書く上でよく取られる方法は,使う変数のスコープ(適用範囲)を限定する方法である.これは,基本的にモジュールとブロックを使い行う.
実際のプログラムを書くとき,モジュールはブロックより多く使われる.しかし,対話的な計算ではスコープ指定が必要となるため,ブロックを使った方が便利なことがよくある.
Module[vars,body]レキシカルなスコープ限定
Block[vars,body]ダイナミックなスコープ限定

スコープ限定の対象

ほとんどの従来型のプログラミング言語では,いわゆる「レキシカルなスコープの限定法」が使われ変数の有効範囲を指定するようになっている.この方法はMathematica のモジュールに相当する.シンボル処理系の言語にLISPがあるが,そこでは,「ダイナミックなスコープの限定」もできるようになっている.これは,Mathematicaのブロックに相当している.
レキシカルな限定を行うと,変数の参照名は局所化され,プログラムコードの一部分だけでしか参照することができないようになる.これに対して,ダイナミックな限定を行うと,局所化は変数の値に対して行われ,値はプログラム実行における時間的な履歴の一区間だけで有効になる.
CやJavaのようなコンパイル系の言語ではコード体系と実行履歴体系をはっきりと区別することができる.シンボル処理系のMathematica 言語では,この境界はやや曖昧である.それというのも,Mathematica では実行中のプログラムからダイナミックにコードを生成することも可能だからである.
あるプログラムでモジュールModule[vars, body]を使うと,このモジュールのコードが実行されるときになって初めて式body は処理の対象になる.そして,変数vars は,実際に変数の参照がコードに現れた時点で初めて局所化される.
ブロック式Block[vars, body]では式body の形は無視される.その代り,式body が評価される間はvars の値はずっと局所的なものとされる.
miの式を割り当てる.
In[1]:=
Click for copyable input
Out[1]=
このブロックのi+mの計算では,iには局所値が使われる.
In[2]:=
Click for copyable input
Out[2]=
モジュールでは,i+mで現れるiだけが局所変数として扱われる.
In[3]:=
Click for copyable input
Out[3]=
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team