|
2.9.14 Mathematica言語の文法
Mathematica言語の文法は組込み済みの変換規則から形作られている.文法の規則に従いテキスト形,ボックス形の式が計算可能な式に変換される.規則の中でも特にStandardFormとInputFormに対応した規則は重要で,それらが Mathematica言語の中核を構成している.TraditionalFormに対応した規則は目的は前者と同じだが詳細で異なる.

Mathematica言語における記述成分
テキスト形式で式を入力すると,演算上意味のある成分に分解される.
例えば, xx+yy-zzzzと文字列を入力したら,xx,+,yy,-,zzzzの各成分に分解される.xx,yy,zzzzは代数記号を表すシンボルとして扱われ,+と-は演算子として扱われる.
式の演算子が式の構造を決定する. Mathematicaで有効な演算子は次の表に示す種類がある.種類により演算子と被演算子の相対的な位置関係が違う.

Mathematica言語における演算子の種類と例
演算子が正確に機能するには所定の位置に被演算子が配置されていることが必要不可欠である.式に複数の演算子があるときはどの演算子が被演算子を先に取り出すかによって式の解釈に違いが出る.
例えば, a*b+cと入力したら,*と +のどちらが被演算子を先に取り出すかで, (a*b)+cか a*(b+c)のどちらにもなり得る.
まぎらわしさを解消するため,演算子には固有の優先度が割り当てられている.優先度が高ければ高いほどその演算子の被演算子がより先に取り出されることになる.
上の例の場合は,乗算 *は加算 +より優先度が高いので,乗算の被演算子がまず取り出される.したがって,a*(b+c)ではなく,(a*b)+cと解釈される.
乗算 *は加算 +より優先される.FullFormで見るとなるほど Timesの関数参照が内側にきている.
In[1]:= {FullForm[a * b + c], FullForm[a + b * c]}
Out[1]= 
//は優先度が低いので,この式では最後に適用される.
In[2]:= a * b + c // f
Out[2]= 
@は優先度が高い.
In[3]:= f @ a * b + c
Out[3]= 
演算子の優先度がどうであろうと,カッコで式の要素を適切に囲うことで任意な評価順序を強制で きる.
カッコで加算項をくくったので, Plusが内関数になる.
In[4]:= FullForm[a * (b + c)]
Out[4]//FullForm= 

演算子の種類と例
A.2.7の表に,演算子や特殊記号が優先度の高い順に列記してあるので参照のこと.*や +等の多くの演算子の優先順位は数学で使う標準的な順位に対応して設定してある.全体の順位はなるべくカッコを使う必要がなくなるように設定してある.
カッコでくくらなくても演算順位どおりの評価順序になる.
In[5]:= 
Out[5]= 
FullFormでどのような構造の式が構築されたか確認してみる.
In[6]:= FullForm[%]
Out[6]//FullForm= 
最初の要素にはカッコがないが2番目の要素と同じになる.つまり,カッコを付けても付けなくてもよい.3番目の要素はカッコでくくる必要がある.
In[7]:= {x -> #^2 &, (x -> #^2)&, x -> (#^2 &)}
Out[7]= 

接合辞型の演算子の評価形態別分類
加算の評価順序を見てみよう.関数 Plusには引数がいくつあってもよいの で,グループ化は行われない.
In[8]:= FullForm[a + b + c + d]
Out[8]//FullForm= 
次に,ベキ乗の評価順序を見てみる.関数 Powerには引数が2つしかないので,要素のグループ化が行われる.
In[9]:= FullForm[a ^ b ^ c ^ d]
Out[9]//FullForm= 
Mathematicaの文法は,キーボードから直接入力できる文字・記号だけでなく, Mathematicaの提供する数々の特殊文字や記号にも対応している.
, , 等の特殊文字も標準アルファベット文字と同様に扱われるし,代数記号としても使える.また, , , 等の特殊記号も同じように使える.
特殊記号によっては演算子として働くものもある.例えば, と は中置形の演算子だし, は前置形の演算子である.また, と は整合辞形の演算子である.
とは中置形の演算子である.
In[10]:= a b c // FullForm
Out[10]//FullForm= 
は掛け算の演算子で記号 *と作用は同じである.中置形の演算子でもある.
In[11]:= a × a × a × b × b × c
Out[11]= 
特殊記号のいくつかは組み合せることによって,複合形の演算子を形成する.例えば,積分式には と の特殊記号がセットで使われる.2つ合わせて初めて機能するので,複合形の演算子といえる.
と を組み合せて積分式を構築する.
In[12]:= k[x] x // FullForm
Out[12]//FullForm= 
評価優先度から考えると,この複合形演算子は実効的にはリスト形と前置形の混成のものととらえられる.
In[13]:= a[x] b[x] x + c[x]
Out[13]= 
この式ではカッコを使わなければいけない.
In[14]:= (a[x] + b[x]) x + c[x]
Out[14]= 
式の入力は一次元的な行モード入力だけでなく,二次元的な数学表記のボックス形式で入力してもよい.二次元的な入力形態も Mathematicaの文法でカバーしている.
上付き文字のボックス要素はベキ数の指数部と解釈される.
In[15]:= 
Out[15]= 
偏微分記号 はボックス形の複合形演算子を形成する.
In[16]:= 
Out[16]= 
はより複雑な複合形演算子の一部に なっている.
In[17]:= 
Out[17]= 
演算子としての は +より優先度が高いことに注意.
In[18]:= 
Out[18]= 
|