Block

Block[{x,y,},expr]

記号 x, y, の局所値を使って式 expr を評価するように指定する.

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を使ってグループ化される.

例題

すべて開くすべて閉じる

  (1)

スコープ  (2)

大域的システムパラメータの設定を一時的に変更する:

与えられた値に一時的に設定した変数で式を評価する:

アプリケーション  (2)

非常に深く再帰する計算を行う:

$RecursionLimitのデフォルトの設定値ではこの計算には低すぎる:

局所的な式を使って複素写像を可視化する:

特性と関係  (2)

Blockは値のみを局所化する.新たな記号は作らない:

Moduleは新たな記号を作る:

反復子はその変数をBlockと同じような方法で局所化する:

Wolfram Research (1988), Block, Wolfram言語関数, https://reference.wolfram.com/language/ref/Block.html.

テキスト

Wolfram Research (1988), Block, Wolfram言語関数, https://reference.wolfram.com/language/ref/Block.html.

CMS

Wolfram Language. 1988. "Block." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/Block.html.

APA

Wolfram Language. (1988). Block. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Block.html

BibTeX

@misc{reference.wolfram_2024_block, author="Wolfram Research", title="{Block}", year="1988", howpublished="\url{https://reference.wolfram.com/language/ref/Block.html}", note=[Accessed: 17-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_block, organization={Wolfram Research}, title={Block}, year={1988}, url={https://reference.wolfram.com/language/ref/Block.html}, note=[Accessed: 17-November-2024 ]}