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

Module und lokale VariablenWie Module funktionieren

2.6.2 Lokale Konstanten

Definition lokaler Konstanten

Mit Module können Sie lokale Variablen anlegen, denen Sie beliebige Folgen von Werten zuweisen können. Oft benötigen Sie eigentlich nur lokale Konstanten, denen Sie einen Wert nur einmal zuweisen. Mit dem With-Konstrukt können Sie derartige lokale Konstanten anlegen.

Hier wird ein globaler Wert für t definiert.

In[1]:= t = 17

Out[1]=

Dies definiert eine Funktion, die t als eine lokale Konstante benutzt.

In[2]:= w[x_] := With[{t = x + 1}, t + t^3]

Hier wird die Definition von w benutzt.

In[3]:= w[a]

Out[3]=

t besitzt weiterhin seinen globalen Wert.

In[4]:= t

Out[4]=

Genau wie in Module werden die von Ihnen in With definierten Anfangswerte evaluiert, ehe With ausgeführt wird.

Der Ausdruck t + 1, der den Wert der lokalen Konstanten t liefert, wird mit dem globalen t evaluiert.

In[5]:= With[{t = t + 1}, t^2]

Out[5]=

Der Grundmechanismus von With[x = , ... , rumpf] besteht darin, in rumpf jedes Auftreten von x usw. durch usw. zu ersetzen. Sie können With als eine Verallgemeinerung des Operators /. ansehen, die sich zur Anwendung auf Mathematica-Code statt auf andere Ausdrücke eignet.

Dies ersetzt x durch a.

In[6]:= With[{x = a}, x = 5]

Out[6]=

Nach der Ersetzung lautet der Rumpf von With a = 5, so daß a den globalen Wert 5 erhält.

In[7]:= a

Out[7]=

Dies löscht den Wert von a.

In[8]:= Clear[a]

In gewisser Hinsicht ist With wie ein Spezialfall von Module, bei dem jeder lokalen Variablen genau einmal ein Wert zugewiesen wird.

Einer der Hauptgründe für den bevorzugten Einsatz von With gegenüber Module ist, daß selbst geschriebene Mathematica-Programme damit in der Regel verständlicher werden. Wenn Sie innerhalb eines Moduls an einer bestimmten Stelle eine lokale Variable x sehen, so müssen Sie möglicherweise den gesamten Code des Moduls durchsuchen, um den Wert von x an dieser Stelle zu bestimmen. In einem With-Konstrukt kann man jedoch den Wert einer lokalen Konstanten immer einfach herausfinden, indem man in der Initialisierungsliste der Werte nachschaut; man muß keinesfalls Code durchsuchen.

Bei verschiedenen With-Konstrukten ist in Bezug auf eine bestimmte Variable immer das Innerste wirksam. Sie können Module und With mischen. Es gilt die allgemeine Regel: Das innerste With-Konstrukt einer bestimmten Variable ist für diese wirksam.

Bei verschachtelten With-Konstrukten ist immer das Innerste wirksam.

In[9]:= With[{t = 8}, With[{t = 9}, t^2]]

Out[9]=

Sie können Module- und With-Konstrukte mischen.

In[10]:= Module[{t = 8}, With[{t = 9}, t^2]]

Out[10]=

Lokale Variablen in inneren Konstrukten maskieren keine äußeren, außer bei Namenskonflikten.

In[11]:= With[{t = a}, With[{u = b}, t + u]]

Out[11]=

Mit Ausnahme der Frage, wann x und rumpf evaluiert werden, funktioniert With[x = , rumpf] genauso wie rumpf /. x -> . Jedoch verhält sich With in einer besonderen Weise, sobald der Ausdruck rumpf selbst With- oder Module-Konstrukte enthält. Es soll vor allem verhindert werden, daß die lokalen Konstanten in den verschiedenen With-Konstrukten miteinander oder mit globalen Objekten in Konflikt geraten. Die Einzelheiten, wie dies gemacht wird, werden in Abschnitt 2.6.3 weiter unten beschrieben.

Das y im inneren With wird umbenannt, um es vor Namenskonflikten mit dem globalen y zu schützen.

In[12]:= With[{x = 2 + y}, Hold[With[{y = 4}, x + y]]]

Out[12]=

Module und lokale VariablenWie Module funktionieren