評価
- 式が基本的なオブジェクト(Integer,String等)のときは,そのままにしておく.
- 式の頭部 h を評価する.
- 式の各要素 ei を順番に評価する.もし h がHoldFirst,HoldRest,HoldAll,HoldAllCompleteの属性を持つならば,対応する要素は評価しない.
- h にSequenceHoldまたはHoldAllCompleteの属性がない限り,要素 ei 中のSequenceをすべて平坦化する.
- h にHoldAllCompleteの属性がない限り,要素 ei にかかっている最も外側のUnevaluatedを取り外す.
- h にFlatの属性があるならば,頭部 h についてネストしている式をすべて平坦化する.
- h にListableの属性があるならば,リストの要素 ei のそれぞれに対して分配する.
- h にOrderlessの属性があるならば,成分 ei を順番に並べる.
- h にHoldAllCompleteの属性がない限り,h[f[e1,…],…]形式のオブジェクトについて定義された,f に関する変換規則で可能なものはすべて適用する.
- h[f[e1,…],…]形式のオブジェクトに,f に関する組込み変換規則を適用する.
- h[f[e1,e2,…],…]または h[…][…]について定義された変換規則で可能なものを適用する.
- h[e1,e2,…]または h[…][…]について組込みの変換規則を適用する.
いくつかの組込み関数は,引数の評価を特殊な手順で行う.制御構文であるWhileがその例である.Whileは属性HoldAllを持つので,Whileの引数は標準では評価されない.代りに,Whileの内部のコードが引数を特殊な方法で評価する.Whileの場合,ループ構造を形成するために引数が繰り返し評価される.
制御構文 | 制御の流れにより決定される順番で引数が評価される(例:CompoundExpression) |
条件子 | |
論理演算子 | |
反復関数 | |
トレース関数 | 評価しない(例:Trace) |
割当て | |
純関数 | 関数の本体は評価されない(例:Function) |
スコープ構文 | |
評価保留関数 | 引数は評価されないまま保持される(例:Hold,HoldPattern) |
論理演算
形式の式が入力されると,その条件成分 は並び順に従って評価される. のいずれかが成り立たない場合は(つまり,Falseになるとき)評価が停止し,結果としてFalseが返される.つまり, を特定の条件が成立するときにのみ,ある式が評価されるような「分岐」に使うことができる,ということを意味する.
反復関数
Do[f,{i,imin,imax}]等の反復関数は下記の手順で評価される.
- 極限 imin,imax が評価される.
- Blockが使用され,反復変数 を局所的なものとする.
- パラメータ imin,imax をもとに反復変数 i の取る値を決定する.
- 反復変数の値が各反復ごとに設定され,その都度 f が評価される.
- i に割り当てた局所値を消去する.
特に指定がない場合,特定の値が i に割り当てられるまで f の評価は行われない.また,評価は i が新たな値を取るたびに行われる.Evaluate[f]を使うと,特定の値が i に割当てられた後だけではなく,直ちに f を評価することができる
割当て
- 左辺が単一のシンボルのとき,評価は行われない.
- 左辺がホールド属性を持たない関数のときは,関数の引数は評価するが,関数自体は評価しない.
割当て式の左辺にHoldPattern[expr]形式の部分式があるとき,それは評価されない.その式がパターンマッチングに使われる場合は,HoldPatternのない expr であるかのようにマッチする.
関数の機構により評価が後回しになる引数についてもEvaluateを引数に適用することで,評価を直ちに行わせることができる.しかし,関数がHoldAllComplete属性を持つ場合は例外である.個の場合,関数の内容は評価体により変更されない.
Hold[expr] | 常にHold[expr]として扱う |
HoldComplete[expr] | 上向きの値を使用禁止とした上でHoldComplete[expr]として扱う |
HoldForm[expr] | 表示では expr として扱う |
HoldPattern[expr] | 規則,定義,パターンでは expr として扱う |
Unevaluated[expr] | 引数が関数に渡されるときは,単なる expr として扱う |
- 反復:特定の式を変化がなくなるまで繰り返し評価する.
- 再帰:ある式の値を得るために必要になる副次的な式を評価する.
Traceは評価の列をリストとして表示する.また再帰に対応して生じる副次的な評価をサブリストの形式で表示する.
現在評価しようとしている式の値を得るための一連の副次的評価に関連した式は,Stack[]によりリストの形で得られる.
$RecursionLimit | 最大再帰深度 |
$IterationLimit | 最大反復回数 |
関数Abort[]を呼ぶか,割込み用のキーを押すことで,どんなときでもWolfram言語に計算の放棄を要求できる.
放棄の要求があったなら,Wolfram言語は進行中の計算をできる限り早く停止させようとする.その際,計算で得られた値が正しくなく,不完全である場合,答を破棄し,$Abortedを返す.