This is documentation for Mathematica 4, which was
based on an earlier version of the Wolfram Language.
View current documentation (Version 11.1)

 Documentation /  Mathematica /  Das Mathematica Buch /  Die Prinzipien von Mathematica /  Evaluierung von Ausdrücken /

Schleifen und KontrollstrukturenFortgeschrittenes Thema: Der Evaluierungsstapel

2.5.10 Trace der Evaluierung

Normalerweise nimmt Mathematica jeden Ausdruck, den Sie als Input eingeben, evaluiert ihn vollständig und gibt dann das Ergebnis zurück. Wenn Sie versuchen, zu verstehen, was Mathematica macht, dann lohnt es sich jedoch häufig, nicht nur das Endergebnis, sondern auch die Zwischenschritte im Evaluierungsverfahren zu betrachten.

Trace der Evaluierung von Ausdrücken

Der Ausdruck 1 + 1 wird sofort zu 2 evaluiert.

In[1]:= Trace[1 + 1]

Out[1]=

2^3 wird evaluiert, ehe die Addition erfolgt.

In[2]:= Trace[2^3 + 4]

Out[2]=

Die Evaluierung jedes Unterausdrucks wird in einer separaten Unterliste gezeigt.

In[3]:= Trace[2^3 + 4^2 + 1]

Out[3]=

Trace[ausdr] liefert eine Liste, die alle Zwischen-Ausdrücke enthält, die bei der Evaluierung von ausdr auftauchen. Außer in recht einfachen Fällen wird die Anzahl der auf diese Weise erzeugten Zwischen-Ausdrücke in der Regel recht umfangreich und die von Trace zurückgegebene Liste schwer verständlich sein.

Mit Trace[ausdr, form] können Sie die Ausdrücke „filtern", die Trace aufzeichnet und nur jene aufbewahren, die zum Muster form passen.

Hier ist eine rekursive Definition einer Fakultätsfunktion.

In[4]:= fac[n_] := n fac[n-1]; fac[1] = 1

Out[4]=

Dies liefert alle Zwischen-Ausdrücke, die bei der Evaluierung von fac[3] erzeugt werden. Das Ergebnis ist recht kompliziert.

In[5]:= Trace[fac[3]]

Out[5]=

Dies zeigt nur Zwischen-Ausdrücke der Form fac[n_].

In[6]:= Trace[fac[3], fac[n_]]

Out[6]=

Sie können in Trace ein beliebiges Muster spezifizieren.

In[7]:= Trace[fac[10], fac[n_/;n > 5]]

Out[7]=

Trace[ausdr, form] funktioniert so, daß es jeden Ausdruck abfängt, der während der Evaluierung von ausdr evaluiert werden soll, und dann jene auswählt, die zum Muster form passen.

Wollen Sie „Aufrufe" einer Funktion wie fac verfolgen, so können Sie dies erreichen, indem Sie Trace einfach anweisen, Ausdrücke der Form fac[n_] herauszugreifen. Auch mit Hilfe von Mustern wie f[n_, 2] lassen sich Aufrufe mit einer bestimmten Argumentstruktur herausgreifen.

Ein typisches Mathematica-Programm besteht jedoch nicht nur aus „Funktionsaufrufen" wie fac[n], sondern enthält auch andere Elemente, wie zum Beispiel Zuweisungen zu Variablen, Kontrollstrukturen usw. Alle diese Elemente werden als Ausdrücke dargestellt. Deshalb läßt sich durch den Einsatz von Mustern in Trace ein beliebiges Mathematica-Programmelement herausgreifen. So können Sie zum Beispiel mit einem Muster wie k= _ alle Zuweisungen an das Symbol k herausgreifen.

Dies zeigt die für k angelegte Folge von Zuweisungen.

In[8]:= Trace[(k=2; For[i=1, i<4, i++, k = i/k]; k), k=_]

Out[8]=

Trace[ausdr, form] kann Ausdrücke herausgreifen, die zu einem beliebigen Zeitpunkt in der Evaluierung von ausdr auftauchen. Die Ausdrücke müssen nicht direkt in der von Ihnen eingegebenen Form von ausdr auftauchen. Sie können stattdessen etwa während der Evaluierung von Funktionen auftreten, die als Teil der Evaluierung von ausdr aufgerufen werden.

Dies ist die Definition einer Funktion.

In[9]:= h[n_] := (k=n/2; Do[k = i/k, {i, n}]; k)

Sie können nach Ausdrücken suchen, die während der Evaluierung von h erzeugt werden.

In[10]:= Trace[h[3], k=_]

Out[10]=

Mit Trace lassen sich die Zwischenschritte bei der Evaluierung nicht nur von Funktionen, die Sie definiert haben, sondern auch von einigen in Mathematica eingebauten Funktionen verfolgen. Sie sollten jedoch wissen, daß die von eingebauten Funktionen eingehaltene Reihenfolge der Zwischenschritte im Detail von ihrer Implementierung und Optimierung in der jeweiligen Mathematica-Version abhängt.

Einige Methoden zur Anwendung von Trace

Die Funktion Trace liefert eine Liste, die die „Geschichte" einer Mathematica-Berechnung darstellt. Die Ausdrücke in der Liste werden in der Reihenfolge angegeben, in der sie während der Berechnung erzeugt wurden. In den meisten Fällen hat die von Trace gelieferte Liste eine verschachtelte Struktur, die die „Struktur" der Berechnung darstellt.

Die Grundidee ist, daß jede Unterliste in der von Trace zurückgegebenen Liste die „Evaluierungskette" für einen bestimmten Mathematica-Ausdruck darstellt. Die Elemente dieser Kette entsprechen verschiedenen Formen desselben Ausdrucks. Gewöhnlich erfordert die Evaluierung eines Ausdrucks jedoch die Evaluierung einer Reihe anderer Ausdrücke, häufig Unterausdrücke. Jede untergeordnete Evaluierung wird als Unterliste in der durch Trace zurückgegebenen Struktur dargestellt.

Dies ist eine Folge von Zuweisungen.

In[11]:= a[1] = a[2]; a[2] = a[3]; a[3] = a[4]

Out[11]=

Dies liefert eine Evaluierungskette, die die für a[i] verwendete Transformationsfolge wiedergibt.

In[12]:= Trace[a[1]]

Out[12]=

Die bei der Vereinfachung des Ausdrucks y + x + y erzeugten aufeinanderfolgenden Formen erscheinen in seiner Evaluierungskette als aufeinanderfolgende Elemente.

In[13]:= Trace[y + x + y]

Out[13]=

Jedes Argument der Funktion f hat eine separate Evaluierungskette, die in einer Unterliste angegeben wird.

In[14]:= Trace[f[1 + 1, 2 + 3, 4 + 5]]

Out[14]=

Die Evaluierungskette für jeden Unterausdruck wird in einer separaten Unterliste angegeben.

In[15]:= Trace[x x + y y]

Out[15]=

Ein Trace der Evaluierung eines verschachtelten Ausdrucks liefert eine verschachtelte Liste.

In[16]:= Trace[f[f[f[1 + 1]]]]

Out[16]=

Bei der Evaluierung eines Mathematica-Ausdrucks werden untergeordnete Evaluierungen im wesentlichen aus zwei Gründen erforderlich. Im ersten Fall enthält der Ausdruck Unterausdrücke, die alle jeweils für sich evaluiert werden müssen. Im zweiten Fall liegen Regeln für die Evaluierung des Ausdruckes vor, die andere Ausdrücke enthalten, die selbst wieder evaluiert werden müssen. Beide Arten der untergeordneten Evaluierung werden in der durch Trace gelieferten Struktur als Unterlisten dargestellt.

Die untergeordneten Evaluierungen stammen in diesem Fall aus der Evaluierung der Argumente von f und g.

In[17]:= Trace[f[g[1 + 1], 2 + 3]]

Out[17]=

Dies ist eine Funktion mit einer beigefügten Bedingung.

In[18]:= fe[n_] := n + 1 /; EvenQ[n]

Die Evaluierung von fe[6] beinhaltet eine untergeordnete Evaluierung, die an die Bedingung geknüpft ist.

In[19]:= Trace[fe[6]]

Out[19]=

Häufig erhalten Sie verschachtelte Listen, wenn Sie die Evaluierung von Funktionen verfolgen, die „rekursiv" durch Kopien von sich selber definiert sind. Der Grund ist in der Regel, daß jede neue Kopie der Funktion in jenen Ausdrücken als ein Unterausdruck erscheint, welche durch Evaluierung vorheriger Kopien der Funktionen erhalten wurden.

So liefert zum Beispiel die Evaluierung von fac[6] mit der Definition fac[n_] := n fac[n-1] den Ausdruck 6 fac[5], der fac[5] als Unterausdruck enthält.

Die aufeinanderfolgenden, erzeugten Kopien von fac erscheinen in aufeinanderfolgenden, verschachtelten Unterlisten.

In[20]:= Trace[fac[6], fac[_]]

Out[20]=

Mit dieser Definition wird fp[n-1] direkt als der Wert von fp[n] erhalten.

In[21]:= fp[n_] := fp[n - 1] /; n > 1

fp[n] erscheint niemals in einem Unterausdruck, deshalb werden keine Unterlisten erzeugt.

In[22]:= Trace[fp[6], fp[_]]

Out[22]=

Hier ist die rekursive Definition der Fibonacci-Zahlen.

In[23]:= fib[n_] := fib[n - 1] + fib[n - 2]

Hier sind die End-Bedingungen für die Rekursion.

In[24]:= fib[0] = fib[1] = 1

Out[24]=

Dies zeigt alle Schritte in der rekursiven Evaluierung von fib[5].

In[25]:= Trace[fib[5], fib[_]]

Out[25]=

Jeder Schritt bei der Evaluierung eines beliebigen Mathematica-Ausdrucks kann als das Ergebnis der Anwendung einer bestimmten Transformationsregel angesehen werden. In Abschnitt 2.4.10 wurde bereits beschrieben, daß alle Regeln, die Mathematica kennt, an spezielle Symbole oder „Etiketten" geknüpft sind. Mit Trace[ausdr, f] können alle Schritte bei der Evaluierung von ausdr angesehen werden, die durch mit dem Symbol f verknüpfte Transformationsregeln ausgeführt werden. In diesem Fall liefert Trace nicht nur die Ausdrücke, auf die jede Regel angewendet wird, sondern auch die Ergebnisse der Anwendung der Regeln.

Im allgemeinen greift sich Trace[ausdr, form] alle Schritte in der Evaluierung von ausdr heraus, bei denen form entweder zu dem zu evaluierenden Ausdruck oder zum Etikett paßt, das mit der verwendeten Regel verknüpft ist.

Trace von Evaluierungen, die mit bestimmten Etiketten verknüpft sind

Dies zeigt nur Zwischen-Ausdrücke, die zu fac[_] passen.

In[26]:= Trace[fac[3], fac[_]]

Out[26]=

Dies zeigt alle Evaluierungen, die mit dem Symbol fac verknüpfte Transformationsregeln verwenden.

In[27]:= Trace[fac[3], fac]

Out[27]=

Hier ist eine Regel für die log-Funktion.

In[28]:= log[x_ y_] := log[x] + log[y]

Dies verfolgt die Evaluierung von log[a b c d] und zeigt dabei alle Transformationen, die mit log verknüpft sind.

In[29]:= Trace[log[a b c d], log]

Out[29]=

Trace innerhalb gewisser Formen abschalten

Mit Trace[ausdr, form] können Sie Ausdrücke verfolgen, die zu form passen und irgendwann während der Evaluierung von ausdr erzeugt wurden. Mitunter möchten Sie nur Ausdrücke verfolgen, die während bestimmter Abschnitte der Evaluierung von ausdr erzeugt werden.

Durch Festlegen der Option TraceOn -> oform können Sie angeben, daß Trace nur während der Evaluierung von Formen erfolgen soll, die zu oform passen. Entsprechend können Sie durch Festlegen von TraceOff -> oform angeben, daß Trace während der Evaluierung von Formen abgeschaltet sein soll, die zu oform passen.

Dies zeigt alle Schritte bei der Evaluierung.

In[30]:= Trace[log[fac[2] x]]

Out[30]=

Dies zeigt nur jene Schritte, die während der Evaluierung von fac auftreten.

In[31]:= Trace[log[fac[2] x], TraceOn -> fac]

Out[31]=

Dies zeigt nur jene Schritte, die nicht während der Evaluierung von fac auftreten.

In[32]:= Trace[log[fac[2] x], TraceOff -> fac]

Out[32]=

Anwendung von Regeln auf Ausdrücke, die während der Evaluierung erscheinen

Dies weist Trace an, nur die Argumente von fib zurückzugeben, die bei der Evaluierung von fib[5] verwendet werden.

In[33]:= Trace[fib[5], fib[n_] -> n]

Out[33]=

Ein mächtiger Aspekt der Mathematica-Trace-Funktion ist, daß das von ihr zurückgegebene Objekt im Grunde ein normaler Mathematica-Ausdruck ist, den Sie mit anderen Mathematica-Funktionen manipulieren können. Ein wichtiger Punkt, den es zu beachten gilt, ist jedoch, daß Trace alle Ausdrücke, die in der Liste erscheinen, in HoldForm einhüllt, um sie vor der Evaluierung zu bewahren. HoldForm wird im normalen Mathematica-Ausgabeformat nicht dargestellt, aber es ist noch in der internen Struktur des Ausdrucks vorhanden.

Dies zeigt die Ausdrücke, die bei Zwischenschritten im Evaluierungsverfahren erzeugt werden.

In[34]:= Trace[1 + 3^2]

Out[34]=

Die Ausdrücke werden in HoldForm eingehüllt, um sie vor der Evaluierung zu bewahren.

In[35]:= Trace[1 + 3^2] // InputForm

Out[35]//InputForm= {{HoldForm[3^2], HoldForm[9]}, HoldForm[1 + 9], HoldForm[10]}

Beim normalen Mathematica-Ausgabeformat ist es mitunter schwierig zu sagen, welche Listen zu der durch Trace zurückgegebenen Struktur gehören und welches die Ausdrücke sind, die evaluiert werden.

In[36]:= Trace[{1 + 1, 2 + 3}]

Out[36]=

Die Betrachtung der Eingabeform beseitigt alle Zweideutigkeiten.

In[37]:= InputForm[%]

Out[37]//InputForm= {{HoldForm[1 + 1], HoldForm[2]}, {HoldForm[2 + 3], HoldForm[5]}, HoldForm[{2, 5}]}

Wenn Sie in Trace eine Transformationsregel verwenden, wird das Ergebnis evaluiert, ehe es in HoldForm eingehüllt wird.

In[38]:= Trace[fac[4], fac[n_] -> n + 1]

Out[38]=

Bei anspruchsvollen Berechnungen können die von Trace zurückgegebenen Listenstrukturen recht kompliziert sein. Bei Verwendung von Trace[ausdr, form] wird Trace nur jene Ausdrücke in der Liste aufführen, die zum Muster form passen. Aber welches Muster Sie auch angeben, die Verschachtelungsstruktur der Listen bleibt dieselbe.

Dies zeigt jedes Auftreten von fib[_] bei der Evaluierung von fib[3].

In[39]:= Trace[fib[3], fib[_]]

Out[39]=

Dies zeigt nur die Vorkommen von fib[1], aber die Verschachtelung der Listen ist dieselbe wie für fib[_].

In[40]:= Trace[fib[3], fib[1]]

Out[40]=

Mit Festlegung der Option TraceDepth -> n läßt sich erreichen, daß Trace nur jene Listen aufführt, die höchstens n Stufen tief verschachtelt sind. Auf diese Weise lassen sich häufig die „großen Schritte" einer Berechnung herausgreifen, ohne die Einzelheiten sehen zu müssen. Beachten Sie: Durch Festlegung von TraceDepth oder TraceOff können Sie vermeiden, daß Ihnen viele Schritte einer Berechnung gezeigt werden; dadurch erhöht sich die Geschwindigkeit der Trace-Operation für diese Berechnung beträchtlich.

Dies zeigt nur Schritte, die in Listen auftreten, die höchsten zwei Stufen tief verschachtelt sind.

In[41]:= Trace[fib[3], fib[_], TraceDepth->2]

Out[41]=

Beschränkung der Tiefe von Trace

Wenn Sie Trace[ausdr, form] verwenden, erhalten Sie eine Liste aller Ausdrücke, die mit form übereinstimmen und die während der Evaluierung von ausdr erzeugt wurden. Mitunter ist es nützlich, sich nicht nur diese Ausdrücke anzusehen, sondern auch die Ergebnisse, die durch ihre Evaluierung erhalten wurden. Sie erreichen dies durch Festlegung der Option TraceForward -> True in Trace.

Dies zeigt nicht nur Ausdrücke, die zu fac[_] passen, sondern auch die Ergebnisse der Evaluierung dieser Ausdrücke.

In[42]:= Trace[fac[4], fac[_], TraceForward->True]

Out[42]=

Ausdrücke, die mit Trace[ausdr, form] herausgegriffen wurden, liegen in der Regel in der Mitte einer Evaluierungskette. Durch Festlegung von TraceForward -> True weisen Sie Trace an, auch den Ausdruck aufzuführen, der sich am Ende der Evaluierungskette ergibt. Wenn Sie TraceForward -> All angeben, wird Trace alle Ausdrücke aufführen, die nach dem Ausdruck auftreten, der zu form in der Evaluierungskette paßt.

Bei TraceForward->All werden alle Elemente der Evaluierungskette aufgeführt, die dem Element folgen, das zu fac[_] paßt.

In[43]:= Trace[fac[4], fac[_], TraceForward->All]

Out[43]=

Durch Festlegung der Option TraceForward können Sie tatsächlich sehen, was mit einer bestimmten Ausdrucksform während einer Evaluierung geschieht. Mitunter wollen Sie jedoch nicht herausfinden, was mit einem bestimmten Ausdruck geschieht, sondern stattdessen, wie der Ausdruck zustande kam. Dies erreichen Sie durch Festlegung der Option TraceBackward. TraceBackward zeigt Ihnen, was einer bestimmten Ausdrucksform in einer Evaluierungskette voranging.

Dies zeigt, daß die Zahl 120 aus der Evaluierung von fac[5] während der Evaluierung von fac[10] stammt.

In[44]:= Trace[fac[10], 120, TraceBackward->True]

Out[44]=

Hier ist die komplette Evaluierungskette, die zur Erzeugung der Zahl 120 gehört.

In[45]:= Trace[fac[10], 120, TraceBackward->All]

Out[45]=

Mit TraceForward und TraceBackward können Sie in einer Evaluierungskette vor- und rückwärts blicken. Mitunter wollen Sie vielleicht auch die Evaluierungsketten betrachten, in denen eine bestimmte Evaluierungskette auftritt. Dies können Sie mit TraceAbove erreichen. Wenn Sie die Option TraceAbove -> True festlegen, dann wird Trace den Anfangs- und Endausdruck in allen relevanten Evaluierungsketten aufführen. Bei TraceAbove -> All wird Trace alle Ausdrücke in all diesen Evaluierungsketten aufführen.

Dies führt die Anfangs- und Endausdrücke in allen Evaluierungsketten auf, die die Kette enthalten, in der 120 vorkommt.

In[46]:= Trace[fac[7], 120, TraceAbove->True]

Out[46]=

Dies zeigt alle Wege, auf denen fib[2] während der Evaluierung von fib[5] erzeugt wird.

In[47]:= Trace[fib[5], fib[2], TraceAbove->True]

Out[47]=

Optionseinstellungen zur Aufnahme von Extraschritten in Trace-Listen

Das Funktionsprinzip von Trace[ausdr, ... ] besteht darin, jeden Ausdruck abzufangen, der während der Evaluierung von ausdr angetroffen wird, und dann nach verschiedenen Kriterien zu bestimmen, ob dieser Ausdruck aufgezeichnet werden soll. Normalerweise fängt Trace Ausdrücke jedoch nur ab, nachdem Funktionsargumente evaluiert worden sind. Durch Festlegung der Option TraceOriginal -> True erreichen Sie, daß Trace auch Ausdrücke betrachtet, ehe Funktionsargumente evaluiert worden sind.

Dies führt Ausdrücke auf, die zu fac[_] sowohl vor als auch nach der Argumentevaluierung passen.

In[48]:= Trace[fac[3], fac[_], TraceOriginal -> True]

Out[48]=

Die von Trace produzierte Listenstruktur enthält normalerweise nur Ausdrücke, die Schritte in nicht-trivialen Evaluierungsketten sind. Deshalb werden zum Beispiel einzelne Symbole, die zu sich selber evaluieren, normalerweise nicht aufgeführt. Trotz allem, wenn Sie TraceOriginal -> True festlegen, dann betrachtet Trace absolut jeden Ausdruck, der mit dem Evaluierungsverfahren zu tun hat, auch jene, die zu trivialen Evaluierungsketten führen.

In diesem Fall führt Trace absolut alle Ausdrücke auf, sogar jene mit trivialen Evaluierungsketten.

In[49]:= Trace[fac[1], TraceOriginal -> True]

Out[49]=

Zusätzliche Optionen für Trace

Wenn Sie Trace zum Studium der Programmausführung einsetzen, stellt sich die Frage, wie lokale Variablen im Programm behandelt werden sollen. In Abschnitt 2.6.3 wird beschrieben, daß Mathematica-Bereichskonstrukte, wie zum Beispiel Module, Symbole mit neuen Namen erzeugen, um lokale Variablen darzustellen. Daher kann eine Variable, auch wenn Sie sie im ursprünglichen Code x genannt haben, bei Ausführung des Programmes in x$nnn umbenannt worden sein.

Trace[ausdr, form] ist so angelegt, daß als Vorgabe ein Symbol x, das in form erscheint, zu allen Symbolen passen wird, die Namen der Form x$nnn tragen und die bei der Ausführung von ausdr auftauchen. Deshalb können Sie zum Beispiel mit Trace[ausdr, x = _] die Zuweisung für alle Variablen, lokale und globale, verfolgen, die in Ihrem ursprünglichen Programm x genannt wurden.

Die Übereinstimmung mit lokalen Variablen verhindern

Mitunter wollen Sie nur die globale Variable x und nicht irgendwelche lokale Variablen, die ursprünglich auch x genannt wurden, verfolgen. Dies erreichen Sie durch Festlegung der Option MatchLocalNames -> False.

Dies verfolgt Zuweisungen zu allen Variablen mit Namen der Form x$nnn.

In[50]:= Trace[Module[{x}, x = 5], x = _]

Out[50]=

Dies verfolgt Zuweisungen nur zur speziellen globalen Variablen x.

In[51]:= Trace[Module[{x}, x = 5], x = _,
MatchLocalNames -> False]

Out[51]=

Die Funktion Trace führt eine vollständige Berechnung aus und liefert dann eine Struktur, die die Geschichte der Berechnung repräsentiert. Insbesondere bei sehr langen Berechnungen ist es jedoch mitunter nützlich, die Berechnung zu verfolgen, während sie abläuft. Die Funktion TracePrint funktioniert im Prinzip wie Trace, mit dem Unterschied, daß sie Ausdrücke druckt, wenn sie angetroffen werden, statt alle Ausdrücke zur Erstellung einer Listenstruktur aufzubewahren.

Dies druckt Ausdrücke, die bei der Evaluierung von fib[3] auftreten.

In[52]:= TracePrint[fib[3], fib[_]]

Out[52]=

Die von TracePrint gedruckte Ausdrucksfolge entspricht der Ausdrucksfolge, die Trace in der Listenstruktur zurückgibt. Die Einrückung in der Ausgabe von TracePrint entspricht der Verschachtelung in der Listenstruktur von Trace. Sie können die Trace-Optionen TraceOn, TraceOff und TraceForward in TracePrint verwenden. Da jedoch TracePrint Ausgabe während der Ausführung produziert, kann es die Option TraceBackward nicht unterstützen. TracePrint ist außerdem so konstruiert, daß TraceOriginal im Grunde immer gleich True gesetzt ist.

Funktionen zur Verfolgung der Evaluierung

Dies beginnt einen Dialog, wenn fac[5] während der Evaluierung von fac[10] angetroffen wird.

In[53]:= TraceDialog[fac[10], fac[5]]

Out[54]=

Innerhalb des Dialoges können Sie zum Beispiel herausfinden, wo Sie sind, indem Sie den „Stapel" betrachten.

In[55]:= Stack[ ]

Out[55]=

Dies kehrt aus dem Dialog zurück und liefert das Endergebnis aus der Evaluierung von fac[10].

In[56]:= Return[ ]

Out[53]=

Mit der Funktion TraceDialog können Sie im Grunde inmitten einer Berechnung stoppen und mit der zur Zeit gerade vorhandenen Mathematica-Umgebung interagieren. Zum Beispiel können Sie Werte von Zwischenvariablen in der Berechnung ermitteln und sogar diese Werte ändern. Es gibt jedoch einige Feinheiten, die zumeist mit Mustern und Modulvariablen zusammenhängen.

TraceDialog ruft die Funktion Dialog zur Anwendung auf eine Folge von Ausdrücken auf. Die Dialog-Funktion wird detailliert in Abschnitt 2.13.2 beschrieben. Mit dem Aufruf von Dialog starten Sie im Grunde eine untergeordnete Mathematica-Session mit ihrer eigenen Folge von Ein- und Ausgabezeilen.

Im allgemeinen kann es sein, daß Sie bestimmte Funktionen auf die Ausdrücke anwenden müssen, die Sie während des Traces einer Evaluierung erhalten. TraceScan[f, ausdr, ... ] wendet f auf jeden auftauchenden Ausdruck an. Der Ausdruck wird in HoldForm eingehüllt, damit er nicht evaluiert wird.

In TraceScan[f, ausdr, ... ] wird die Funktion f auf Ausdrücke angewendet, ehe sie evaluiert werden. TraceScan[f, ausdr, muster, fp] wendet f vor und fp nach der Evaluierung an.

Schleifen und KontrollstrukturenFortgeschrittenes Thema: Der Evaluierungsstapel