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 /  Modularität und die Benennung von Dingen /

Scheinvariablen in der MathematikBlöcke im Vergleich zu Modulen

2.6.6 Blöcke und lokale Werte

Module in Mathematica erlauben Ihnen, die Namen von Variablen als lokale Größen zu behandeln. Manchmal möchte man jedoch, daß die Namen global, aber die Werte lokal sind. In Mathematica wird dies mit Block möglich.

Erstellen lokaler Werte

Hier ist ein Ausdruck, der x enthält.

In[1]:= x^2 + 3

Out[1]=

Hier wird der vorhergehende Ausdruck unter Verwendung eines lokalen Wertes für x evaluiert.

In[2]:= Block[{x = a + 1}, %]

Out[2]=

Es gibt keinen globalen Wert für x.

In[3]:= x

Out[3]=

In den vorherigen Abschnitten wurde beschrieben, daß sich eine Variable x in einem Modul, wie Module[x, rumpf], immer auf ein eindeutiges Symbol bezieht, das jedesmal, wenn ein Modul benutzt wird, ein anderes ist und sich von dem globalen Symbol x unterscheidet. Das x in einem Block wie Block[x, rumpf] gilt jedoch als globales Symbol x. Der Wert von x hingegen wird von Block als lokal erklärt. Der Wert, den x bei Eintritt in den Block hatte, wird beim Verlassen immer wiederhergestellt. Während der Ausführung des Blocks kann x jeden beliebigen Wert annehmen.

Hier wird dem Symbol t der Wert 17 zugewiesen.

In[4]:= t = 17

Out[4]=

Variablen in Modulen haben eindeutige lokale Namen.

In[5]:= Module[{t}, Print[t]]

In Blöcken bewahren Variablen ihren globalen Namen, können jedoch lokale Werte haben.

In[6]:= Block[{t}, Print[t]]

t erhält innerhalb des Blocks einen lokalen Wert.

In[7]:= Block[{t}, t = 6; t^4 + 1]

Out[7]=

Wenn die Ausführung des Blocks beendet ist, wird der ursprüngliche Wert von t wiederhergestellt.

In[8]:= t

Out[8]=

Mit Blöcken können Sie in Mathematica „Umgebungen" einrichten, in denen Sie vorübergehend die Werte von Variablen ändern können. Ausdrücke, die Sie an einer beliebigen Stelle während der Ausführung eines Blocks evaluieren, werden die Werte verwenden, die Sie gerade im Block für die Variablen definiert haben. Das trifft sowohl für die Ausdrücke, die direkt als Teil des Blockrumpfes erscheinen, zu, als auch für jene, die an irgendeiner Stelle während der Evaluierung des Blockrumpfes erzeugt werden.

Hier wird ein verzögerter Wert für das Symbol u definiert.

In[9]:= u := x^2 + t^2

Wenn Sie u außerhalb eines Blocks evaluieren, wird der globale Wert für t benutzt.

In[10]:= u

Out[10]=

Sie können für t einen temporären Wert angeben, der innerhalb des Blocks verwendet wird.

In[11]:= Block[{t = 5}, u + 7]

Out[11]=

Eine wichtige implizite Anwendung von Block in Mathematica gibt es bei den Iterationskonstrukten wie Do, Sum und Table. Im Grunde benutzt Mathematica in all diesen Konstrukten Block zum Aufstellen lokaler Werte für die Iterationsvariablen.

Sum macht automatisch den Wert des Laufindexes t lokal.

In[12]:= Sum[t^2, {t, 10}]

Out[12]=

Die lokalen Werte in Iterationskonstrukten sind etwas allgemeiner als in Block. Sowohl Variable wie a[1] als auch reine Symbole können lokale Werte haben.

In[13]:= Sum[a[1]^2, {a[1], 10}]

Out[13]=

Wenn Sie in Mathematica eine Funktion konstruieren, erweisen sich manchmal „globale Variablen" als nützlich, die Funktionen beeinflussen können, ohne explizit als Argument angegeben zu sein. So hat beispielsweise Mathematica selbst eine globale Variable $RecursionLimit, die die Evaluierung aller Funktionen beeinflußt, ohne daß sie je explizit als Argument angegeben wird.

Mathematica wird gewöhnlich jeden Wert, den Sie für eine globale Variable definieren, so lange erhalten, bis Sie diesen explizit ändern. Oft möchten Sie jedoch Werte aufstellen, die lediglich für die Dauer einer bestimmten Berechnung oder eines Teils der Berechnung bestehen. Sie erreichen dies, indem Sie die Werte lokal bezüglich eines Mathematica-Blocks machen.

Hier wird eine Funktion definiert, die von der „globalen Variablen" t abhängt.

In[14]:= f[x_] := x^2 + t

In diesem Fall wird der globale Wert von t benutzt.

In[15]:= f[a]

Out[15]=

Innerhalb eines Blocks können Sie einen lokalen Wert für t anlegen.

In[16]:= Block[{t = 2}, f[b]]

Out[16]=

Sie können globale Variablen nicht nur zum Aufstellen von Funktionsparametern benutzen, sondern auch zum Sammeln von Funktionsresultaten. Wenn Sie derartige Variablen so anlegen, daß sie lokal für einen Block gelten, können Sie erreichen, daß lediglich Ergebnisse von Funktionen gesammelt werden, die während der Ausführung dieses Blocks aufgerufen werden.

Diese Funktion inkrementiert die globale Variable t und gibt ihren aktuellen Wert zurück.

In[17]:= h[x_] := (t += x^2)

Wenn Sie keinen Block benutzen, ändert die Evaluierung von h[a] den globalen Wert von t.

In[18]:= h[a]

Out[18]=

Mit einem Block wird lediglich der lokale Wert von t beeinflußt.

In[19]:= Block[{t = 0}, h[c]]

Out[19]=

Der globale Wert von t bleibt unverändert.

In[20]:= t

Out[20]=

Wenn Sie in einen Block wie Block[x, rumpf] eintreten, wird jeder Wert für x entfernt. Daher können Sie im Prinzip x als eine „symbolische Variable" innerhalb des Blocks behandeln. Wenn Sie jedoch explizit x aus dem Block zurückgeben, so wird es durch seinen Wert außerhalb des Blocks ersetzt, sobald es evaluiert wird.

Der Wert von t wird beim Eintritt in den Block entfernt.

In[21]:= Block[{t}, Print[Expand[(t + 1)^2]]]

Wenn jedoch ein Ausdruck, der t enthält, zurückgegeben wird, wird dieser unter Verwendung des globalen Wertes von t evaluiert.

In[22]:= Block[{t}, t^2 - 3]

Out[22]=

Scheinvariablen in der MathematikBlöcke im Vergleich zu Modulen