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

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

Evaluierung in Mustern, Regeln und DefinitionenBedingte Anweisungen

2.5.7 Evaluierung in Iterationsfunktionen

Die in Mathematica eingebauten Iterationsfunktionen wie Table und Sum und auch Plot und Plot3D evaluieren ihre Argumente auf eine etwas besondere Weise.

Bei der Evaluierung eines Ausdrucks wie Table[f, i, imax] wird im ersten Schritt (siehe Abschnitt 2.6.6) der Wert von i als lokal gültig erklärt. Anschließend wird die Schranke imax in der Laufindexspezifikation evaluiert. Der Ausdruck f wird in einer unevaluierten Form bewahrt, wird aber wiederholt evaluiert, wenn i der Reihe nach Werte zugewiesen erhält. Sobald dies beendet ist, wird der globale Wert von i wiederhergestellt.

Die Funktion Random[ ] wird hier viermal separat evaluiert, deshalb werden vier verschiedene Pseudozufallszahlen erzeugt.

In[1]:= Table[Random[ ], {4}]

Out[1]=

Dies evaluiert Random[ ], ehe es an Table weitergereicht wird. Das Ergebnis ist eine Liste mit vier identischen Zahlen.

In[2]:= Table[ Evaluate[Random[ ]], {4} ]

Out[2]=

Meistens ist es vorteilhaft, wenn die Funktion f in einem Ausdruck wie Table[f, i, imax] so lange in einer unevaluierten Form gehalten wird, bis i bestimmte Werte zugewiesen worden sind. Dies trifft insbesondere dann zu, wenn eine vollständige symbolische Form für f, gültig für jedes i, nicht gefunden werden kann.

Dies definiert fac so, daß es für ein ganzzahliges Argument die Fakultät und sonst NaN (steht für „Not a Number") liefert.

In[3]:= fac[n_Integer] := n! ; fac[x_] := NaN

In dieser Form wird fac[i] so lange nicht evaluiert, bis i ein ganzzahliger Wert zugewiesen wird.

In[4]:= Table[fac[i], {i, 5}]

Out[4]=

Evaluate erzwingt, daß fac[i] evaluiert wird, wobei i als symbolisches Objekt belassen wird.

In[5]:= Table[Evaluate[fac[i]], {i, 5}]

Out[5]=

In den Fällen, in denen eine vollständige Form für f mit beliebigem i in Ausdrücken wie Table[f, i, imax] gefunden werden kann, ist es häufig effizienter, diese Form zuerst zu berechnen, und sie dann an Table weiterzugeben. Sie erreichen dies mit Table[Evaluate[f], i, imax].

Sum wird in diesem Fall separat für jeden Wert von i evaluiert.

In[6]:= Table[Sum[i^k, {k, 4}], {i, 8}]

Out[6]=

Es ist jedoch möglich, für jeden Wert von i eine symbolische Formel für die Summe zu erhalten.

In[7]:= Sum[i^k, {k, 4}]

Out[7]=

Durch Einfügen von Evaluate können Sie Mathematica anweisen, zuerst die Summe symbolisch zu evaluieren und dann über i zu iterieren.

In[8]:= Table[Evaluate[Sum[i^k, {k, 4}]], {i, 8}]

Out[8]=

Evaluierung in Iterationsfunktionen

Es ist vorteilhaft (siehe Abschnitt 1.9.1), Evaluate zu verwenden, wenn Sie einen Graphen einer Funktion oder einer Liste von Funktionen erstellen. Dadurch wird vor der Iteration zuerst die symbolische Form der Funktion oder der Liste ermittelt.

Evaluierung in Mustern, Regeln und DefinitionenBedingte Anweisungen