属性であり,関数に与えられたすべての引数を未評価に維持することを指定する.
HoldAll
属性であり,関数に与えられたすべての引数を未評価に維持することを指定する.
例題
すべて開く すべて閉じる例 (1)
関数fに属性HoldAllを与える:
SetAttributes[f, HoldAll]その結果,引数は(この場合は存在しない)関数本体に入る前には評価されなくなる:
f[1 + 1, 2 + 2, 3 + 3]g[1 + 1, 2 + 2, 3 + 3]スコープ (2)
FullForm[1 - 1]HoldForm[FullForm[1 - 1]]これは,HoldFormに属性HoldAllがあることによって可能になっている:
Attributes[HoldForm]関数inoutに属性HoldAllを与える:
SetAttributes[inout, HoldAll]引数をHoldでラップして(第1引数はラップせずに)返す2引数の関数を定義する:
inout[in_, tag_] := {Hold[in], in, Hold[tag]}どちらの引数も関数本体に入る前には評価されないが,第1引数は関数内で評価される:
inout[1 - 1, 1 + 1]アプリケーション (3)
スコーピング動作をする多くの関数がHoldAll属性を持つ:
Attributes[Plot//Evaluate]関数のリストをプロットする際は,関数ごとに異なるスタイルが使われる:
Plot[{Sin[x], Cos[x]}, {x, 0, 2π}]リスト構造が明白ではない場合は,異なるスタイルは与えられない:
Plot[Through[{Sin, Cos}[x]], {x, 0, 2π}]Evaluateを使ってリスト構造を明らかにする:
Plot[Evaluate[Through[{Sin, Cos}[x]]], {x, 0, 2π}]リスト中の異なるベクトル値を持つ関数にもまた異なるスタイルが与えられる:
Plot[{Through[{Sin, Cos}[x]], Through[{Tan, Cot}[x]]}, {x, 0, 2π}]HoldAllとUnevaluatedを使ってどこでも評価が起りそうな場所でのシンボルの評価を抑制する:
SetAttributes[symbolLength, HoldAll];
symbolLength[s_Symbol] := StringLength[SymbolName[Unevaluated[s]]]xyzzy = 1;symbolLength[xyzzy]until::usage = "until[cond,cmd] repeats evaluating cmd until cond is True.";SetAttributes[until, HoldAll]until[cond_, cmd_] := While[True, cmd;If[cond, Return[]]]i = 1;
until[Prime[i] > 10 ^ 6, i++];i特性と関係 (12)
Attributes[Hold]Hold[1 + 2]シンボルに作用する関数は,しばしばHoldAll属性を必要とする:
i = 5;
Protect[i]Protect[Evaluate[i]]Tableのような制御構造は引数が評価されないようにプロテクトする:
i = 5;Table[i, {i, 1, 4}]さもなければ,大域変数がその操作に影響することがあるかもしれない:
Table[Evaluate[i], {i, 1, 4}]Evaluateを使ってHoldAll 関数の引数の評価を強制する:
Attributes[Unprotect]syms = {Plus, Times};Unprotect[Evaluate[syms]]Expand[(1 + x) ^ 3]f[x_] := Evaluate[%]Definition[f]Unevaluatedを使って関数が一時的にHoldAllの属性を持つかのように扱う:
Length[Unevaluated[1 + 2 + 3]]Length[1 + 2 + 3]Function[e, Hold[e], {HoldAll}][1 + 2]Function[e, Hold[e]][1 + 2]属性HoldAllを持つ関数にも,一連の接合が行われる:
SetAttributes[f, HoldAll]
f[Sequence[a, b, c]]Unevaluatedは関数本体に入る前に削除される:
f[x_] := Hold[x]
f[Unevaluated[1 + 1]]_[___, g, ___] ^:= "upvalue"
f[Sequence[a, b, c], g]属性HoldAllCompleteは3つの動作すべてを抑制する:
Attributes[HoldComplete]HoldComplete[Sequence[a, b, c], g]Hold[f[1 + 2]] /. f[x_] :> g[x]Insert[Hold[x + x], y, {1, 2}]NHoldAllはNから引数をプロテクトするが,それ以外は通常と同じようにそれらの引数を評価する:
Attributes[Derivative]N[Derivative[1 + 1]]N[f[1 + 1]]HoldPatternはパターンが評価されないようにするが,パターンマッチを妨げることはしない:
{HoldPattern[_ + _], _ + _}関連するワークフロー
- 引数をホールドする関数に変数値を代入する
履歴
1988 で導入 (1.0)
テキスト
Wolfram Research (1988), HoldAll, Wolfram言語関数, https://reference.wolfram.com/language/ref/HoldAll.html.
CMS
Wolfram Language. 1988. "HoldAll." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/HoldAll.html.
APA
Wolfram Language. (1988). HoldAll. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/HoldAll.html
BibTeX
@misc{reference.wolfram_2026_holdall, author="Wolfram Research", title="{HoldAll}", year="1988", howpublished="\url{https://reference.wolfram.com/language/ref/HoldAll.html}", note=[Accessed: 03-August-2026]}
BibLaTeX
@online{reference.wolfram_2026_holdall, organization={Wolfram Research}, title={HoldAll}, year={1988}, url={https://reference.wolfram.com/language/ref/HoldAll.html}, note=[Accessed: 03-August-2026]}