シンボルの値

Wolfram言語にx+xと式を入力すると2xの答が返ってくる.Wolfram言語では,変数xは純粋なシンボルとして認識され形式的な扱いを受ける.シンボルとしてあるとき,xはどのような式でも表すことができる.

しかし,xのようなシンボルに特定の値を置く必要が出てくる.場合によってはその値は特定の数値であったり,またより多くの場合,それは別の式であったりする.

1+2x等の式を入力し,その中にあるシンボルxを特定の値に置き換えるには,まずWolfram言語の変換規則を作り,次に,その規則を式に適用すればよい.xを値3で置き換えるには,変換規則x->3を作成する.ここで,->は2つの文字から構成され,間にスペースは入れないことに注意してほしい.x->3は「x3になる」規則としてとらえるとよいだろう.

特定の式だけに変換規則を適用するには,expr/.rule の書式を使う./.は置換を行う演算子で,スラッシュと終止符の間にスペースは入れない.

x->3の規則を式1+2xに適用する.
In[1]:=
Click for copyable input
Out[1]=
xを置換するものは何でもよい.この例ではx2-yで置き換えさせる.
In[2]:=
Click for copyable input
Out[2]=
変換規則だけを入力する.普通の代数式と同じように扱われる.
In[3]:=
Click for copyable input
Out[3]=
上の規則を式x^2-9適用する.
In[4]:=
Click for copyable input
Out[4]=
expr/.x->valueexprx を値 value で置換する
expr/.{x->xval,y->yval}複数の置換を行う

式のシンボルを値と置換

複数の規則をリストにすることで一括で適用することができる.
In[5]:=
Click for copyable input
Out[5]=

置換の演算子/.は,特定の式に限って変換規則を適用するときに使う.変換規則をどんな式にでも適用可能としたい場合はどうしたらよいだろうか.例えば,xが現れるたびにx3に変えたい場合はどうしたらよいだろう.

「変数の定義」で説明したように,これを行うには,x=3を用いてx3を割り当てればよい.一度x=3の割当てが行われると,xは現れるたびに常に3に置き換えられる.

3xに割り当てる.
In[6]:=
Click for copyable input
Out[6]=
xが現れるたびに自動的に3に置き換えられる.
In[7]:=
Click for copyable input
Out[7]=
今度は,式1+axの値として割り当てる.
In[8]:=
Click for copyable input
Out[8]=
x1+aで置き換えられる.
In[9]:=
Click for copyable input
Out[9]=

シンボルの値は数だけでなくどんな式としても定義することができる.ただし,一度,等号関係を定義したら,値を明確に変更もしくは除去するまでは,定義した値が内部に残るので注意が必要である.除去のし忘れが,ユーザの間違いの最も大きな共通した原因になっている.

x=value常に x に割り当てられる値を定義する
x=.x に対して定義されている値を消去する

シンボルへの値の割当て

シンボルxには先に割り当てておいた値がそのまま残っている.
In[10]:=
Click for copyable input
Out[10]=
xに割り当てた値を除去する.
In[11]:=
Click for copyable input
今度はxは何も特定の値を持たない.このため,純粋にシンボル的な変数として使うことができる.
In[12]:=
Click for copyable input
Out[12]=

Wolfram言語ではxのようなシンボルはいろいろ違った用途に対して使うことができる.事実,Wolfram言語の持つ高い汎用性は,このように必要に応じて各種の用途に対応できる,という機能性に負うところが大きい.ただし,間違いを避けるためどんな用途でxを使っているのか,常に把握しておく必要はある.特に,xが別の式を表す名前として働くときの用途と,純粋な未知数としての用途は,きちんと区別しておく必要がある.

記号代数的な処理ができない従来のプログラミング言語では,変数を単なるオブジェクトの名前としてしか使うことができない.ここでオブジェクトとは数値を指し,その数値が変数の値として割り当てられる.一方,Wolfram言語では,xは各種変換規則が適用可能な純粋に形式的な変数として扱われる.もちろん,一度,x=3のような割当て関係を定義したなら,xは常に3に置き換えられることになり,形式的な変数としては働かなくなってしまう.

x=3のような明確な割当て定義を行うと,それは大域的な効果を持つ.一方,expr/.x->3のような置換は,特定の式 expr だけに対して有効である.まぎらわしくならないように,必要不可欠でない限り,明確な割当ては行わない方がよいだろう.

割当てと置換は混ぜて使ってもよい.割当て定義を使うことで,置換したい項を持った式や,置換操作を施したい規則に名前を与えることができる.

シンボルtに値を割り当てる.
In[13]:=
Click for copyable input
Out[13]=
tの値が参照され,値の中にあるx2に置換される.
In[14]:=
Click for copyable input
Out[14]=
今度は別のxの値に対するtの値が求められる.
In[15]:=
Click for copyable input
Out[15]=
まず,xPiで置換されたときのtの値が求められる.次に,結果が数値的に評価される.
In[16]:=
Click for copyable input
Out[16]=