lhs:=rhs
rhs を lhs の遅延型の値として設定する.rhs は,未評価の形式で維持される.lhs が現れると,rhs で置き換えられて,その都度評価される.
SetDelayed 
lhs:=rhs
rhs を lhs の遅延型の値として設定する.rhs は,未評価の形式で維持される.lhs が現れると,rhs で置き換えられて,その都度評価される.
詳細
- SetDelayedは属性HoldFirstではなくHoldAllを持つ.
- lhs:=rhs/;test の形式の割当てをすることができる.ただし,test は,それぞれの変換規則の条件や適用性を与える.同じ lhs について複数の割当てを与えることができるが,この場合,test の形式を変えて与える.
- lhs:=rhs は,指定された割当てが実行可能な場合にはNullをその他の場合には$Failedを与える.
例題
すべて開く すべて閉じるスコープ (9)
左辺 (4)
SetDelayedで定義された変数は使われるたびに評価される:
r := RandomReal[]
{r, r, r}即時的割当てと遅延的割当てを使って特殊な場合と一般的な場合についてそれぞれ定義する:
fact[1] = 1;
fact[n_] := n fact[n - 1]
fact[10]f[x_ /; x > 0] := Sqrt[2x]{f[2], f[-2]}unit[x_ /; x < 0] := 0
unit[x_ /; x ≥ 0] := 1
{unit[-2], unit[0], unit[1], unit[a]}いろいろな種類の値 (5)
r := RandomReal[]
OwnValues[r]f[x_] := x ^ 2
DownValues[f]derivative[1][f][x_] := fg[x];
SubValues[derivative]mod/:a_mod + b_mod := modPlus[a, b]
UpValues[mod]数値,N[f[x_]] := Product[1 - x ^ -i, {i, 2, 10}];
NValues[f]N[f[2]]アプリケーション (3)
newton[r_] := FixedPoint[Function[x, (x + r / x) / 2], r]
newton[5.0]pi2 := pi2 = N[Pi ^ 2, 50]
pi2Definition[pi2]名前呼び出し(call-by-name)の動作は,ホールドされた引数を使った未評価式に対する定義で実装することができる:
SetAttributes[f, HoldFirst]
f[sym_, val_] := (sym = val ^ 2)x = 17;f[x, 5]x特性と関係 (9)
x = RandomReal[];
{x, x, x}対照的に,遅延的定義の右辺は定義が使われるたびに評価される:
y := RandomReal[];
{y, y, y}x = 5;
f[x] := 17
Definition[f]f[x_] := x ^ 2
f[x_] := x ^ 3
f[2]必要に応じて,パターン変数はネストしたスコープの内側で名前を変えられる:
makedef[z_] := (f[x_] := z ^ 2;)
makedef[x]
Definition[f]したがって,入力はパターン変数に一致するが,定義の右辺にある変数はそれに一致しない:
f[5]x = 5;
f[x_] := x ^ 2
{f[2], x}g[x_] = x ^ 2;
{g[2], x}f[2 x y] + f[x y] //. f[a_ b_] :> f[a] + f[b]g[a_ b_] := g[a] + g[b]
g[2 x y] + g[x y] + f[x y]fact[n_] := n fact[n - 1];
fact[1] = 1;
Definition[fact]fact[10]Definitionは記号に関連する定義を出力する:
f[x_] := x ^ 2
Definition[f]Informationは,定義を含む記号のさまざまな情報を出力する:
? fDownValuesは,定義された任意の下向きの値に対応する規則のリストを返す:
DownValues[f]f[-1] = I;
f[x_] := x ^ 2
SetAttributes[f, Listable]Unset (=.)を使って特定の左辺を持つ定義を除去する:
f[-1]=.Definition[f]Clear[f]
Definition[f]ClearAllを使って属性も除去する:
ClearAll[f]
Definition[f]考えられる問題 (4)
_を除くことで,関数についてではなくリテラル値についてのみの変換を定義する:
f[x] := x ^ 2;
g[x_] := x ^ 2;
{f[x], g[x]}{f[2], g[2]}Expand[(x + 1) ^ 3]f[x_] := %Definition[f]f[1]Expand[(x + 1) ^ 3]Evaluateを使って右辺の評価を強制する:
g[x_] := Evaluate[%]
Definition[g]g[1]Expand[(x + 1) ^ 3]あるいは,Setを使って右辺の評価を強制する:
h[x_] = %Definition[h]h[1]f[x_] := f[x + 1]
f[1]g[10] = 10;
g[x_] := g[x + 1]
g[1]f[x_] := f[Floor[x / 2]] + 1
f[10]g[1] = 0;
g[x_] := g[Floor[x / 2]] + 1
g[10]テクニカルノート
関連するワークフロー
- シンボルや関数の定義を消去する ▪
- 定義された関数をすべて求める
履歴
1988 で導入 (1.0)
テキスト
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_2026_setdelayed, author="Wolfram Research", title="{SetDelayed}", year="1988", howpublished="\url{https://reference.wolfram.com/language/ref/SetDelayed.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_setdelayed, organization={Wolfram Research}, title={SetDelayed}, year={1988}, url={https://reference.wolfram.com/language/ref/SetDelayed.html}, note=[Accessed: 02-November-2026]}