評価

標準の評価手順
Wolfram言語は h[e1,e2]の形式の式の評価を以下の手順で行う.式が変化するごとに,同じ手順による評価処理が行われる.
非標準的な引数の評価
いくつかの組込み関数は,引数の評価を特殊な手順で行う.制御構文であるWhileがその例である.Whileは属性HoldAllを持つので,Whileの引数は標準では評価されない.代りに,Whileの内部のコードが引数を特殊な方法で評価する.Whileの場合,ループ構造を形成するために引数が繰り返し評価される.
制御構文
制御の流れにより決定される順番で引数が評価される(例:CompoundExpression
条件子
対応した分岐先が選択されたときだけに引数が評価される(例:IfWhich
論理演算子
論理式の評価結果の解釈に必要とされるときだけ引数が評価される(例:AndOr
反復関数
反復操作における各ステップで第1引数が評価される(例:DoSumPlot
トレース関数
評価しない(例:Trace
割当て
第1引数が部分的に評価される(例:SetAddTo
純関数
関数の本体は評価されない(例:Function
スコープ構文
変数指定の部分は評価されない(例:ModuleBlock
評価保留関数
引数は評価されないまま保持される(例:HoldHoldPattern
引数が特殊な評価を受ける組込み関数

論理演算

形式の式が入力されると,その条件成分 は並び順に従って評価される. のいずれかが成り立たない場合は(つまり,Falseになるとき)評価が停止し,結果としてFalseが返される.つまり, を特定の条件が成立するときにのみ,ある式が評価されるような「分岐」に使うことができる,ということを意味する.
関数OrAnd同様に働く.Orは引数が1つでもTrueであった時点でTrueを返す.これに対し,Xorは常にすべての引数を評価する.

反復関数

Do[f,{i,imin,imax}]等の反復関数は下記の手順で評価される.
複数の反復変数があるとき,上述の手順がそれぞれの変数について,より高順位のすべての変数のそれぞれの値に対して順番に適用される.
特に指定がない場合,特定の値が i に割り当てられるまで f の評価は行われない.また,評価は i が新たな値を取るたびに行われる.Evaluate[f]を使うと,特定の値が i に割当てられた後だけではなく,直ちに f を評価することができる

割当て

割当て式の左辺は部分的にしか評価されない.
式の右辺は,式が即時型(=)であれば評価されるし,また,遅延型(:=)であれば評価されない.
割当て式の左辺にHoldPattern[expr]形式の部分式があるとき,それは評価されない.その式がパターンマッチングに使われる場合は,HoldPatternのない expr であるかのようにマッチする.
非標準の引数評価における強制評価
f[,Evaluate[expr],]
f に引数評価を保留にする属性HoldFirstHoldRestHoldAllがあっても,引数 expr を評価する
評価が保留される引数の強制評価
関数の機構により評価が後回しになる引数についてもEvaluateを引数に適用することで,評価を直ちに行わせることができる.しかし,関数がHoldAllComplete属性を持つ場合は例外である.個の場合,関数の内容は評価体により変更されない.
評価の禁止
Wolfram言語には式を「包み込んで」評価を抑制するためにさまざまな関数が用意されている.
Hold[expr]
常にHold[expr]として扱う
HoldComplete[expr]
上向きの値を使用禁止とした上でHoldComplete[expr]として扱う
HoldForm[expr]
表示では expr として扱う
HoldPattern[expr]
規則,定義,パターンでは expr として扱う
Unevaluated[expr]
引数が関数に渡されるときは,単なる expr として扱う
式の評価を抑制する機能を持つ頭部
評価処理の大域的な制御
上記の評価手順には次の2つの基本処理ステップがある.
反復処理は,評価の列を発生し,そこでは各種の変換規則が適用され,一連の式が得られる.
Traceは評価の列をリストとして表示する.また再帰に対応して生じる副次的な評価をサブリストの形式で表示する.
現在評価しようとしている式の値を得るための一連の副次的評価に関連した式は,Stack[]によりリストの形で得られる.
$RecursionLimit
最大再帰深度
$IterationLimit
最大反復回数
式の評価処理を制御するための大域変数
放棄
関数Abort[]を呼ぶか,割込み用のキーを押すことで,どんなときでもWolfram言語に計算の放棄を要求できる.
放棄の要求があったなら,Wolfram言語は進行中の計算をできる限り早く停止させようとする.その際,計算で得られた値が正しくなく,不完全である場合,答を破棄し,$Abortedを返す.
AbortProtectにより放棄を延期させることができる.その際,CheckAbortにより放棄の要請が発生したかどうかをチェックすることができる.