SetDelayed

lhs:=rhs

rhs lhs の遅延型の値として設定する.rhs は,未評価の形式で維持される.lhs が現れると,rhs で置き換えられて,その都度評価される.

詳細

  • SetDelayedは属性HoldFirstではなくHoldAllを持つ.
  • lhs:=rhs/;test の形式の割当てをすることができる.ただし,test は,それぞれの変換規則の条件や適用性を与える.同じ lhs について複数の割当てを与えることができるが,この場合,test の形式を変えて与える.
  • lhs:=rhs は,指定された割当てが実行可能な場合にはNullをその他の場合には$Failedを与える.

例題

すべて開くすべて閉じる

  (1)

スコープ  (9)

左辺  (4)

SetDelayedで定義された変数は使われるたびに評価される:

即時的割当てと遅延的割当てを使って特殊な場合と一般的な場合についての定義をする:

条件付きの定義をする:

いくつかの条件付きの場合で関数を定義する:

いろいろな種類の値  (5)

それ自身の値:

下向きの値:

部分値:

上向きの値:

数値:

アプリケーション  (3)

ニュートン法で平方根を計算する手続きを定義する:

必要に応じて計算を実行し結果をキャッシュする:

名前呼び出し(call-by-name)の動作は,未評価式に対する定義で実装することができる:

大域変数が変更された:

特性と関係  (9)

即時的定義の右辺は定義が行われたときに評価される:

遅延的定義の右辺は定義が使われるたびに評価される:

定義の左辺の引数は定義が行われる前に評価される:

同じ左辺の定義はそれより前のものを上書きする:

必要に応じて,パターン変数はネストしたスコープの内側で名前を変えられる:

遅延的割当ては大域変数に影響されないスコープを導入する:

即時的割当てはスコープを導入しない:

規則を使って特定の式の変換をする:

定義を使ってgを含むすべての式を自動的に変換する:

より特殊な定義はより一般的な定義の前に置かれる:

Definitionは記号に関連する定義を出力する:

Informationは,定義を含む記号のさまざまな情報を出力する:

DownValuesは,定義された任意の下向きの値に対応する規則のリストを返す:

Unset (=.)を使って特定の左辺を持つ定義を除去する:

任意の定義を除去する.属性は除去しない:

ClearAllを使って属性も除去する:

考えられる問題  (4)

_を除くことで,関数についてではなくリテラル値についてのみの変換を定義する:

遅延的定義を使うと予期せぬ結果になることがある:

実際に行われた定義とその動作:

Evaluateを使って右辺の評価を強制する:

あるいは,Setを使って右辺の評価を強制する:

反復的な暴走定義:

基底ケースを与えると反復が止まる:

再帰的な暴走定義:

底を与えると反復が終了する:

おもしろい例題  (1)

フィボナッチ(Fibonacci)数列の動的プログラミング:

計算中に新たな定義が加えられた:

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

テキスト

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

CMS

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

APA

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

BibTeX

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

BibLaTeX

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