WOLFRAM言語チュートリアル

反復関数における評価

反復操作を行うTableSum等の組込み関数において,引数評価は多少特別の扱いを受ける.

Table[f,{i,imax}]等の評価で取られる最初のステップでは,i の値を局所的にすることが行われる(「ブロックと局所値」を参照のこと).次に,反復回数の上限 が評価される.式 f は,i の値が確定するまで未評価なまま保持される.反復評価がすべて終了したとき,変数 i にはもとの大域値が戻される.

乱数生成関数RandomReal[]を4回実行する.毎回,別の擬似乱数が生成される.
In[1]:=
Click for copyable input
Out[1]=
Tableを作用させる前にRandomReal[]を評価しておく.すると,同じ値が4回出力されるだけになる.
In[2]:=
Click for copyable input
Out[2]=

Table[f,{i,imax}]のような反復式では,普通, に特定の値が割り当てられるまでは関数 f は未評価な形のままにしておいた方がよい.任意の値を持つ i に対して有効となる関数 f の完全なシンボル形式が見付からないときは特にそうである.

引数が整数なら階乗を計算し,そうでない場合は(英語で「数でない」という意味の「Not a Number」の略)を返す関数を定義し,と呼ぶ.
In[3]:=
Click for copyable input
に整数が割り当てられるまで,は評価されない.
In[4]:=
Click for copyable input
Out[4]=
Evaluateを使い, がシンボル的なオブジェクトであってもを強制評価させる.
In[5]:=
Click for copyable input
Out[5]=

Table[f,{i,imax}]のような式において,f を,任意な i を持つ関数として完全なシンボル形式で記述することが可能であれば,このシンボル形式をまず計算してしまい,その後にTableを作用させた方が計算の効率が上がる.これを行うには,Table[Evaluate[f],{i,imax}]を使う.

に新たな値が割り当てられるたびにSum式は評価される.
In[6]:=
Click for copyable input
Out[6]=
実は,この和に相当するシンボル形式の論理式を得ることができる.それは, がどんな値であっても有効である.
In[7]:=
Click for copyable input
Out[7]=
Evaluateを挿入しておくことで,Wolfram言語にまず和をシンボル的に評価させ,次に, 上で反復させる.
In[8]:=
Click for copyable input
Out[8]=
Table[f,{i,imax}]i に特定な値が割り当てられるまでは f を未評価なままにしておく
Table[Evaluate[f],{i,imax}]i は未知数としておいて,f を強制的に評価する

反復関数における評価