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 /

Blöcke im Vergleich zu ModulenKontexte und Pakete

2.6.8 Kontexte

Es ist immer eine gute Idee, Variablen und Funktionen Namen zu geben, die so explizit wie möglich sind. Manchmal werden dadurch jedoch die Namen übermäßig lang.

In Mathematica können Sie das Konzept „Kontext" zur Organisierung von Symbolnamen verwenden. Kontexte sind insbesondere in solchen Mathematica-Paketen wichtig, die Symbole einführen, deren Namen nicht mit denen anderer Symbole in Konflikt geraten dürfen. Wenn Sie Mathematica-Pakete schreiben, oder differenziert Pakete anderer nutzen wollen, sollten Sie sich mit dem Kontext-Konzept vertraut machen.

Die Grundidee dabei ist, daß der vollständige Name eines jeden Symbols in zwei Teile getrennt wird: einen Kontext und einen Kurznamen. Der vollständige Name wird als Kontext`kurz geschrieben, wobei das ` das Gravis oder der Accent Grave ist (ASCII-Dezimalcode 96), der in Mathematica „Kontextmarke" genannt wird.

Hier ist ein Symbol mit dem Kurznamen x und dem Kontext aaaa.

In[1]:= aaaa`x

Out[1]=

Sie können dieses Symbol genau wie jedes andere Symbol benutzen.

In[2]:= %^2 - %

Out[2]=

Zum Beispiel können Sie einen Wert für dieses Symbol definieren.

In[3]:= aaaa`x = 78

Out[3]=

Mathematica behandelt a`x und b`x als vollständig unterschiedliche Symbole.

In[4]:= a`x == b`x

Out[4]=

In der Regel faßt man alle Symbole, die ein bestimmtes Thema betreffen, in einem bestimmten Kontext zusammen. So können zum Beispiel Symbole, die physikalische Einheiten repräsentieren, einen Kontext PhysicalUnits` haben. Derartige Symbole können vollständige Namen wie PhysicalUnits`Joule oder PhysicalUnits`Mole haben.

Obgleich Sie stets auf ein Symbol mit seinem vollständigen Namen verweisen können, ist ein Kurzname oft bequemer.

An jedem beliebigen Punkt einer Mathematica-Session gibt es stets einen aktuellen Kontext $Context. Sie können auf Symbole in diesem Kontext einfach durch Angabe ihrer Kurznamen verweisen.

Der Vorgabe-Kontext für Mathematica-Sessionen ist Global`.

In[5]:= $Context

Out[5]=

Für Symbole, die im aktuellen Kontext stehen, ist die Angabe des Kurznamens ausreichend.

In[6]:= {x, Global`x}

Out[6]=

Kontexte in Mathematica funktionieren ähnlich wie Dateiverzeichnisse in vielen Betriebssystemen. Sie können immer eine bestimmte Datei durch Angabe ihres vollständigen Namens inklusive ihres Verzeichnisses spezifizieren. Zu jedem Zeitpunkt gibt es aber gewöhnlich ein aktuelles Arbeitsverzeichnis, analog zum aktuellen Mathematica-Kontext. Dateien, die sich in diesem Verzeichnis befinden, können dann durch Angabe ihres Kurznamens spezifiziert werden.

Kontexte in Mathematica können so wie Verzeichnisse in vielen Betriebssystemen hierarchisch sein. So kann zum Beispiel der vollständige Name eines Symbols eine Folge von Kontextnamen enthalten, wie bei ```name.

Spezifikation von Symbolen in verschiedenen Kontexten

Hier ist ein Symbol im Kontext a`b`.

In[7]:= a`b`x

Out[7]=

Wenn Sie eine Mathematica-Session starten, ist die Voreinstellung des aktuellen Kontextes Global`. Von Ihnen eingeführte Symbole befinden sich normalerweise in diesem Kontext. In Mathematica eingebaute Symbole, wie z. B. Pi, befinden sich jedoch im Kontext System`.

Damit Sie nicht nur zu Symbolen im Kontext Global`, sondern auch zu solchen in Kontexten wie System` leicht Zutritt haben, gibt es in Mathematica den Begriff Kontext-Suchpfad. Zu jedem Zeitpunkt einer Mathematica-Session gibt es sowohl einen aktuellen Kontext $Context als auch einen aktuellen Kontext-Suchpfad $ContextPath. Der Suchpfad soll ermöglichen, daß Sie nur einen Symbol-Kurznamen eingeben müssen und daß dann Mathematica in einer Folge von Kontexten das Symbol mit diesem Kurznamen sucht.

Der Kontext-Suchpfad für Symbole in Mathematica entspricht dem „Suchpfad" für Programmdateien in Betriebssystemen wie Unix und MS-DOS.

Der voreingestellte Kontext-Pfad enthält die Kontexte für System-Symbole.

In[8]:= $ContextPath

Out[8]=

Wenn Sie Pi eintippen, so interpretiert Mathematica dies als Symbol mit dem vollständigen Namen System`Pi.

In[9]:= Context[Pi]

Out[9]=

Bestimmen von Kontexten und Kontext-Suchpfaden

Wenn Sie in Mathematica Kontexte verwenden, können zwei Symbole in unterschiedlichen Kontexten durchaus den gleichen Kurznamen haben. So kann beispielsweise das Symbol mit dem Kurznamen Mole sowohl im Kontext PhysicalUnits` als auch im Kontext BiologicalOrganisms` vorkommen.

Dann stellt sich jedoch die Frage, welches Symbol Sie nach der Eingabe nur des Kurznamens Mole erhalten. Die Antwort lautet: Sie erhalten immer das Symbol in dem Kontext, der im Kontext-Suchpfad zuerst auftritt.

Hier werden zwei Symbole eingeführt, die beide den Kurznamen Mole haben.

In[10]:= {PhysicalUnits`Mole, BiologicalOrganisms`Mole}

Out[10]=

So werden dem $ContextPath zwei zusätzliche Kontexte hinzugefügt.

In[11]:= $ContextPath =
Join[$ContextPath,
{"PhysicalUnits`", "BiologicalOrganisms`"}]

Out[11]=

Wenn Sie jetzt Mole eintippen, erhalten Sie das Symbol aus dem Kontext PhysicalUnits`.

In[12]:= Context[Mole]

Out[12]=

Wenn Sie für ein Symbol einen Kurznamen eingeben, nimmt Mathematica im allgemeinen an, daß Sie das Symbol mit dem Namen meinen, dessen Kontext im Kontext-Suchpfad zuerst erscheint. Deshalb werden Symbole mit gleichem Kurznamen, deren Kontexte erst später im Kontext-Suchpfad erscheinen, überschattet oder überdeckt werden. Um diese Symbole anzusprechen, müssen Sie ihre vollständigen Namen benutzen.

Mathematica warnt Sie allerdings immer, wenn Sie neue Symbole einführen, die beim gegenwärtigen $ContextPath bereits existierende Symbole überdecken würden. Falls Sie eine Notebook-Benutzeroberfläche verwenden, wird Mathematica Sie in diesen Fällen üblicherweise wählen lassen, welches Symbol Sie behalten möchten.

Dies führt ein Symbol mit Kurznamen Mole in den Kontext Global` ein. Mathematica warnt Sie, daß das neue Symbol bereits existierende Symbole mit dem Kurznamen Mole überdecken wird.

In[13]:= Global`Mole

Out[13]=

Wenn Sie jetzt Mole eintippen, erhalten Sie das Symbol im Kontext Global`.

In[14]:= Context[Mole]

Out[14]=

Wenn Sie einmal ein Symbol einführen, das existierende Symbole überdeckt, wird es dies so lange tun, bis Sie entweder den $ContextPath ändern oder bis Sie das Symbol explizit entfernen. Beachten Sie, daß es nicht ausreicht, den Wert des Symbols zu löschen; Sie müssen vielmehr das Symbol vollständig aus Mathematica entfernen. Dazu können Sie die Funktion Remove[s] einsetzen.

Löschen und Entfernen von Symbolen in Mathematica

Hier wird das Symbol Global`Mole entfernt.

In[15]:= Remove[Mole]

Wenn Sie jetzt Mole eingeben, erhalten Sie das Symbol PhysicalUnits`Mole.

In[16]:= Context[Mole]

Out[16]=

Wenn Mathematica einen Symbolnamen ausdruckt, muß es entscheiden, ob es den vollständigen Namen oder nur den Kurznamen ausgibt. Es gibt die Version des Namens an, die Sie unter Berücksichtigung der aktuellen Werte von $Context und $ContextPath eintippen müßten, um das jeweilige Symbol zu erhalten.

Der Kurzname wird für das erste Symbol gedruckt; wenn Sie ihn eintippen würden, würde daher dieses Symbol geliefert.

In[17]:= {PhysicalUnits`Mole, BiologicalOrganisms`Mole}

Out[17]=

Wenn Sie einen Kurznamen eingeben, für den weder im aktuellen Kontext noch in irgendeinem anderen Kontext des Kontext-Suchpfades ein Symbol existiert, so muß Mathematica ein neues Symbol mit diesem Namen erzeugen. Symbole dieser Art werden immer in den durch $Context spezifizierten aktuellen Kontext eingefügt.

Dies fügt das neue Symbol mit dem Kurznamen baum ein.

In[18]:= baum

Out[18]=

Mathematica bringt baum in den aktuellen Kontext Global`.

In[19]:= Context[baum]

Out[19]=

Blöcke im Vergleich zu ModulenKontexte und Pakete