Trace
詳細とオプション
- 一般に,Trace[expr,form]の form は評価される完全な式それぞれと,この評価に使用されたすべての変換規則に結合されたタグと比較される.
- Trace[expr,lhs->rhs]は,lhs に適合する式を取り出し,返されるリストの rhs を置換する. »
- Traceが返すリスト中の式はすべて,HoldCompleteFormに包み込まれる. »
- Traceは,ネストしたリストの組を返す.個々のリストは,特定の式に見出される一連の形式を含む単一の評価列と対応する.このリストは付属評価の履歴を与えるサブリストを持つ.
- 以下のオプションを与えることができる.
-
MatchLocalNames True x に x$nnn を表させるかどうか TraceAbove False form を含む評価列を表示するかどうか TraceBackward False 評価列中で form の前にある式を表示するかどうか TraceDepth Infinity 評価に含めるネストのレベル数 TraceForward False 評価列中で form の後ろにある式を表示するかどうか TraceOff None トレースのスイッチをオフにする形式 TraceOn _ トレースのスイッチをオンにする形式 TraceOriginal False 頭部や引数を評価する以前に式を調べるかどうか - Traceの実行中,form 引数,およびオプションTraceOnやTraceOffの設定は,対応する大域変数$TracePattern,$TraceOn,および$TraceOffの値を再設定することで変更することができる. »
例題
すべて開く すべて閉じる例 (3)
スコープ (11)
標準的な評価 (5)
Trace[1]a = 1;b = 2;f[x_, y_] := x + y;Trace[f[a, b]]Mapの演算をトレースする:
Trace[Map[Cos, {0, π, 2π}]]Trace[(2 + 3) ^ (2 + 3) + (4 + 5) ^ (4 + 5)]Trace[(2 + 3) ^ (2 + 3) + (4 + 5) ^ (4 + 5), _Plus]シンボルPlusに関連付けられた変換規則を使うすべての評価を含める:
Trace[(2 + 3) ^ (2 + 3) + (4 + 5) ^ (4 + 5), Plus]fib[1] = fib[2] = 1;fib[n_] := fib[n - 1] + fib[n - 2];Trace[fib[5], fib[n_]]頭部fibを削除するために,マッチするそれぞれに変換規則を適用する:
Trace[fib[5], fib[n_] :> n]非標準的な評価 (6)
Ifのような条件の評価をトレースする.Falseブランチの2+2は決して評価されない:
Trace[If[EvenQ[2], 1 + 1, 2 + 2], TraceOriginal -> Automatic]Andのような論理演算子の評価をトレースする.OddQ[5]が評価されない点に注意のこと:
Trace[OddQ[3] && OddQ[4] && OddQ[5], TraceOriginal -> Automatic]Doのような反復関数の評価をトレースする:
Trace[Do[n ^ 2, {n, 1 + 1, 2 + 2}], TraceOriginal -> Automatic]属性HoldAllを持つCompoundExpression (;)の各ステップをトレースする.本体内で各引数が順に評価される:
Trace[1 + 1;2 + 2, TraceOriginal -> Automatic]CompoundExpressionのように最終引数を返す属性がない関数を定義する:
f[most___, last_] := Identity[last]Trace[f[1 + 1, 2 + 2], TraceOriginal -> Automatic]ホールド特性がある頭部がホールド特性がない頭部で置換される評価ステップをトレースする:
Trace[List@@Join[Hold[1 + 1], Hold[2 + 2]], TraceOriginal -> Automatic]結果は同じであるが,ホールド属性がないと評価順は極めて異なる:
Trace[List@@Join[gold[1 + 1], gold[2 + 2]], TraceOriginal -> Automatic]関数FoldListにはホールド属性はない:
Attributes[FoldList]この関数は,内部的には非常順的評価を使って f[x0,x1], f[f[x0,x1],x2], …という評価過程の列を計算する:
Trace[FoldList[Plus, 0, {3, 2, 1}]]一般化と拡張 (3)
大域変数$TracePatternの値をリセットしてTrace[expr,form]の実行中に form 引数の設定を変更する:
Trace[(1 + 1) ^ (2 + 2);$TracePattern = Power;(1 + 1) ^ (2 + 2), _]大域変数$TraceOnの値をリセットすることで,Traceの実行中にTraceOnオプションの設定を変更する:
fac[1] = 1;fac[n_] := n fac[n - 1];Trace[fac[4];$TraceOn = _;fac[4], TraceOn -> _Plus]大域変数$TraceOffの値を再設定することで,Traceの実行中にTraceOffオプションの設定を変更する:
fac[1] = 1;fac[n_] := n fac[n - 1];Trace[fac[4];$TraceOff = _fac;fac[4]]オプション (8)
MatchLocalNames (1)
デフォルトで,x のようなシンボルは,x$nnn という形式局所名を持つシンボルと一致する:
f[x_] := 1 / (1 + x ^ 2)Trace[f[x] + Module[{x}, f[x]], f[x]]MatchLocalNamesFalseとすると,x の明示的な一致のみが表示される:
Trace[f[x] + Module[{x}, f[x]], f[x], MatchLocalNames -> False]TraceAbove (1)
fib[1] = fib[2] = 1;fib[n_] := fib[n - 1] + fib[n - 2];Trace[fib[4], fib[x_] + fib[y_]]Trace[fib[4], fib[x_] + fib[y_], TraceAbove -> True]Trace[fib[4], fib[x_] + fib[y_], TraceAbove -> All]Trace[fib[4], fib[x_] + fib[y_], TraceAbove -> {All, False}]TraceBackward (1)
fib[1] = fib[2] = 1;fib[n_] := fib[n - 1] + fib[n - 2];Trace[fib[3], Plus[__Integer ? Positive]]Trace[fib[3], Plus[__Integer ? Positive], TraceBackward -> True]Trace[fib[3], Plus[__Integer ? Positive], TraceBackward -> All]TraceDepth (1)
TraceForward (1)
TraceOff (1)
TraceOn (1)
アプリケーション (2)
「式の評価」で説明されている通り,最初に頭部が評価され,その後,頭部がHoldFirst,HoldRest,HoldAllまたはHoldAllCompleteの属性のいずれかを持つかどうかによって,引数がある順序で評価される.HoldAll属性を持つ関数CompoundExpressionのすべての評価過程を頭部の評価も含めて追跡する:
Trace[1 + 1;2 + 2, TraceOriginal -> True]属性HoldAllを持つ関数CompoundExpression,属性HoldFirstを持つ関数Set,ホールド属性を持たない関数Plusを組み合せる:
Trace[a = 2;b = 3;a + b, TraceOriginal -> True]属性HoldAllを有するSetDelayedを用いた割当て評価を追跡する:
Trace[f[x_] := x ^ 2, TraceOriginal -> True]HoldFirst属性を持つSetを用いた割当ての実行と比較する.右辺はパターンが作成される前に評価される:
Trace[g[x_] = x ^ 2, TraceOriginal -> True]特性と関係 (4)
Traceは,HoldCompleteFormでラップされた数式のネストしたリストを返す:
InputForm[Trace[2 ^ 3 + 4]]form がシンボルではない場合,Trace[expr,form]は form に合致する評価のみを含む:
fib[1] = fib[2] = 1;fib[n_] := fib[n - 1] + fib[n - 2];Trace[fib[4], _fib]これは,form に一致しないすべての評価を削除し,その後,空の評価鎖を削除することに相当する:
Trace[fib[4]]DeleteCases[%, HoldCompleteForm[Except[_fib]], Infinity]ReplaceRepeated[{h_HoldCompleteForm :> h, {} -> Nothing}] /@ %% === Trace[fib[4], _fib]form が symbol の場合,Trace[expr,form]には form に一致する評価だけでなく,form に関連付けられたあらゆる種類の評価定義の規則の左辺に一致する評価と,それらの規則を適用した結果も含まれる:
fib[1] = fib[2] = 1;fib[n_] := fib[n - 1] + fib[n - 2];Trace[Identity[fib][4], fib]Attributes[Trace]これは,トレースの前にパターンが評価されないことを意味する:
s = Plus;
Trace[1 + 1, s]Evaluateまたは同様の手法を使用して,Traceを入力する前に評価を強制することができる:
Trace[1 + 1, Evaluate[s]]関連するガイド
-
▪
- 記号的な実行履歴 ▪
- 低レベルにおけるシステム探究 ▪
- 調整とデバッグ
関連するワークフロー
- スタックトレースを得る
履歴
1991 で導入 (2.0) | 2026 で更新 (15.0)
テキスト
Wolfram Research (1991), Trace, Wolfram言語関数, https://reference.wolfram.com/language/ref/Trace.html (2026年に更新).
CMS
Wolfram Language. 1991. "Trace." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2026. https://reference.wolfram.com/language/ref/Trace.html.
APA
Wolfram Language. (1991). Trace. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Trace.html
BibTeX
@misc{reference.wolfram_2026_trace, author="Wolfram Research", title="{Trace}", year="2026", howpublished="\url{https://reference.wolfram.com/language/ref/Trace.html}", note=[Accessed: 06-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_trace, organization={Wolfram Research}, title={Trace}, year={2026}, url={https://reference.wolfram.com/language/ref/Trace.html}, note=[Accessed: 06-November-2026]}