Block

Block[{x,y,},expr]
シンボル x, y, の局所値を使って式 を評価するように指定する.

Block[{x=x0,},expr]
x, に局所的な初期値を定義する.

詳細詳細

  • Blockは,変数の値を一時的に変更することができる環境の設定を可能にする.
  • ブロックを実行すると,x, y, に割り当てられた値はクリアされる.ブロックの実行が終ると,これらの記号のもとの値が復帰される.
  • Blockは,シンボルの値(values)にだけ影響を与え,これらの名前に影響することはない.
  • x, y, の初期値が評価された後に,x, y, がクリアされる.
  • Block[{vars},body/;cond]を条件付きの変換規則の右辺として使用することができる.
  • Blockは属性HoldAllを持つ.
  • Blockは,変数にダイナミックスコープを利用する.
  • DoSumそしてTable等の反復構成において,Blockは自動的に反復子の値を局所的なものにするのに使用される.

予備知識
予備知識

  • Blockは,ブロック内で想定する値を,ブロック外で想定する値から区別することによって、記号を局所化するスコーピング構文である.Blockは,変数の動的なスコーピングを実装する.つまり,局所記号の名前は変わらない.局所記号に値がある場合には,この値が使われる.それ以外の場合には,それを囲んでいる関数の値が使われる.Blockは,値を局所化するだけで,それを置き換えることはしない.
  • これに対して,Moduleは字句スコーピングを行う.つまり,呼出しごとに変数の新しい一意的なコピーが作成され,これは囲んでいる関数や続くModuleへの呼出しのどこでも使われることはない.
  • Blockは通常Moduleより速いので,スコープされた変数を持つ関数が何度も呼び出される場合には,Blockの方が速く評価結果を出すことがある.Blockは,DoSumProductTable等の構文における反復子の値を局所化するのに自動的にしようされる.Blockはネストしてもよい.
  • 局所構文の定義を行えるもう一つのスコーピング構文にWithがある.これは,読取りのみの字句変数を実装し,スコーピング構文の中で局所変数として起らない場合にのみ,記号を置換する.Blockと同様,WithModuleより速い.通常の代入ではスコーピングは保存されないが, Withでは未評価の式内部での代入,つまりネスとされたスコープが可能である.
  • Block構文の内部(あるいは外側)にある複数の式は,CompoundExpressionを使ってグループ化される.
1988年に導入
(1.0)