標準評価手順
ここでは,式の評価に使われる Mathematica の標準的な処理手順を説明していく.この手順はほとんどの式に使われるが,プログラムや制御構造体を表した式では使われない.後者には別の手順が使われる.
標準評価手順では,まず,式の頭部が評価され,次に,式の各要素が評価される.式の各要素にも一般的な式と同様に扱われ同じ評価手順が帰納的に適用される.
関数
Printは代る代る3回続けて評価される.評価されるたびに引数が表示され,最後に戻り値として
Nullが出力される.
| Out[1]= |  |
| Out[2]= |  |
頭部

が先に評価されるので,通常の足し算として扱われる.
| Out[3]= |  |
Mathematica は,式の頭部を評価し終えると,即座に頭部が属性を持ったシンボルかどうかを判定する.もしも,順不同性Orderlessや平坦性Flat,または,リスト可Listableの属性が備わっていると,Mathematica は,式の要素の評価が終了した時点で,これらの属性に関連した変換操作を行う.
手順の次の段階では,Mathematica は,これから評価していく式に対して,既知の定義を適用する.ユーザ指定の定義がまず適用され,次に,組込み済みの定義が適用される.
適用可能な定義が見付かると,それに対応した変換処理が式に対して施される.結果として,別の式が生成されるが,その式についても標準評価手順による処理が繰り返し施される.
| • 式の頭部を評価する. |
| • 式の各要素を1つずつ評価する. |
| • 属性(順不同性Orderless,リスト可Listable,平坦性Flat)に関連した変換操作を適用する. |
| • ユーザ指定の定義を適用する. |
| • 組込み定義を適用する. |
| • 結果を評価する. |
標準評価手順
「評価の原理」で説明したが,Mathematica における評価の基本は,適用可能な規則がなくなるまで式の評価を続ける,ということである.つまり,結果が出たら,それに対して再び規則が適用される.そして,次の結果に変化がなくなるまで,評価処理は繰り返される.
簡単な例を見ながら,具体的な標準評価手順の進行を説明する.以下の説明では,
とする.
| 2ax+a^2+1 | ユーザが式を入力する |
| Plus[Times[2,a,x],Power[a,2],1] | 式が内部表記に変換される |
| Times[2,a,x] | まずこの項が評価される |
| Times[2,7,x] | が評価され,あらかじめ定義された値7が代入される |
| Times[14,x] | 式全体にTimesの組込み定義が使われ,積が評価される |
| Power[a,2] | この項が次に評価される |
| Power[7,2] | に割り当てられた値7が代入される |
| 49 | 式全体にPower用の組込み規則が使われ,ベキが計算される |
| Plus[Times[14,x],49,1] | 評価済みの各項がPlus式に取り込まれる |
| Plus[50,Times[14,x]] | 式全体にPlus用の組込み定義が使われ,和が計算される |
| 50+14x | 結果がこのように表示される |
簡単な評価例
「評価処理のトレース」で触れるが,Mathematica にはトレースと呼ばれる評価処理の追跡機能が備わっている.Trace[expr]を式に作用させると,式の評価過程で生成される暫定的な内部式をネストされたリスト形式で表示することができる.(注意点として,標準評価手順では,式の木構造において最下位から上位に向かって評価は進められるので,式の最小単位の部分がTraceからの結果のリストに最初に現れる.)

を

としておく.
| Out[4]= |  |
トレースさせると,式の評価過程で生成されたすべての副次的な式がネストされたリスト形式で表示される.
| Out[5]= |  |
定義の適用順序は重要な意味を持っている.つまり,「組込み関数の変更」で触れたように,ユーザ指定の定義は組込み型の定義より優先されるため,組込み型の定義を代替するための定義を与えることが可能である.
| Out[6]= |  |
ArcSinにユーザ指定の定義を与える.プロテクトを解除しておく必要がある.
| Out[8]= |  |
「異なるシンボルへの定義式の関連付け」で説明したが,規則を上向きの値または下向きの値としてオブジェクトに割り当てることができる.Mathematica は,上向きの値の定義を下向きの値の定義より優先させる.
のような式には,通常,適用可能な定義には2つの形式がある.f に関連付けられた下向きの値,そして,g に関連付けられた上向きの値である.Mathematica は,g に関連付けられた定義を f の定義より優先させる.
この順序付けは,特殊な規則は一般的な規則より先に適用させる,といった指針に基づいている.関数に関連付けられた下向きの値の前に,引数に関連付けられた上向きの値を優先させることで,任意の引数を持つ関数のための一般定義を上書きする特別な引数に対する定義を作成することができる.

に関する規則を

に関連付けた形で定義する.
今度は,

を

に関連付けた形で定義する.

に関連付けられた規則が

に関連付けられた規則より先に適用される.
| Out[11]= |  |

の規則を除去する.今度は,

の規則が使われる.
| Out[12]= |  |
• 式 において,g に関連付けられた定義は, f に関連付けられた定義より優先する. |
定義の適用順序
Plusのような組込み関数の多くは下向きの値を持つ.ただし,Mathematica の組込み型オブジェクトによっては上向きの値を持つものもある.例えば,ベキ級数を表すのに使われるSeriesDataオブジェクトは,数学的操作に関した組込み済みの上向きの値を持つ.
等の式における,標準評価手順に従い適用される一連の定義の優先順位は以下の通りである.
g に関連付けしたユーザ定義
g に関連付けられている組込み定義
f に関連付けしたユーザ定義
f に関連付けられている組込み定義
下向きの値より上向きの値の方が優先されるという事実は,いろいろな場面で重要な意味を持つ.例えば,式を再構成するための操作を定義するとする.再構成の操作に関する上向きの値を各種オブジェクトに対して与えると,これらの上向きの値はこのオブジェクトが現れるたびに使われる.しかし,特別なオブジェクトが見当たらないときに使うための,再構成用の一般的な手続きを与えることもまた可能である.その場合,この手続きは,再構成操作に関する下向きの値として与えることができる.下向きの値は上向きの値の後に試されるので,上向きの値を伴ったオブジェクトが何もないときに限って,一般手続きが使われる.
「

オブジェクト」を再構成するための定義を作成し,

に関連付ける.
今度は,一般則を作り,

に関連付ける.
2つの

オブジェクトを再構成させる.すると,

に関連付けられた規則が使われる.
| Out[15]= |  |

オブジェクトを再構成させると,

に関連付けられた一般則が使われる.
| Out[16]= |  |
一般に,式は上向きの値を備えた複数のオブジェクトを持つ.Mathematica は,まず,式の頭部を参照し,それに関連した上向きの値を試す.次に,式の各要素を順々に参照していき,要素に上向きの値があればそれを試す.この手順は,まずユーザ定義の上向きの値に対して行われ,続いて,組込み済みの上向きの値に対して行われる.また,この手順が一連の要素に対して適用されるとき,先に現れる要素に関連付けられた上向きの値は,後寄りの要素に関連付けられた上向きの値より優先される.

に関連付ける形で

に関する上向きの値を定義する.

に関する上向きの値を定義する.
どの上向きの値が適用されるかは,

の引数列においてどちらが先に現れるかによる.
| Out[19]= |  |