|
A.4.2 非標準的な引数の評価
いくつかの組込み関数は,引数の評価を特殊な手順で行う.制御構文であるWhileがその例である.Whileは属性HoldAllをもつので,その引数は標準では評価されない.代わりに,Whileの内部のコードが引数を特殊な方法で評価する.Whileの場合,ループ構造を形成するために引数が繰り返し評価される.

引数が特殊な評価を受ける組込み関数
論理演算
&& && 形式の式が入力されると,その条件成分 は並び順に従って評価される. のいずれかが成り立たない場合は(つまり,Falseになるとき)評価が停止し,結果としてFalseが返される.つまり, を特定の条件が成立するときにのみ,ある式が評価されるような「分岐」に使うことができる,ということを意味する.
関数OrもAnd同様に働く.Orは引数が1つでもTrueであった時点でTrueを返す.これに対し,Xorは常にすべての引数を評価する.
反復関数
Do[f, i, imin, imax ]等の反復関数は下記の手順で評価される.
反復パラメータを評価し,それが i, imin, imax の形式でないならば評価は停止される.
Blockが使用され,反復変数iを局所的なものとする.
パラメータimin,imaxをもとに反復変数iの取る値を決定する.
反復変数iの値が各反復ごとに設定され,その都度fが評価される.
iに割り当てた局所値を消去する.
複数の反復変数があるとき,上述の手順がそれぞれの変数について,より高順位のすべての変数のそれぞれの値に対して順番に適用される.
特に指定がない場合,特定の値がiに割り当てられるまでfの評価は行われない.また,評価はiが新たな値を取るたびに行われる.Evaluate[f]を使うと,直ちにfを評価した後,各反復で再び評価を行うようにできる.
割当て
割当て式の左辺は部分的にしか評価されない.
左辺が単一のシンボルのとき,評価は行われない.
左辺がホールド属性をもたない関数のときは,関数の引数は評価するが,関数自体は評価しない.
式の右辺は,式が即時型(=)であれば評価されるし,また,遅延型(:=)であれば評価されない.
割当て式の左辺にHoldPattern[expr]形式の部分式があるとき,それは評価されずに,割当てが行われる前にexprの未評価の形に置き換えられる.
|