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 /  Globale Aspekte von Mathematica-Sessionen /

InhaltDialoge

2.13.1 Die Hauptschleife

In jeder interaktiven Session arbeitet Mathematica im Grunde in einer Schleife. Es wartet auf Ihre Eingabe, verarbeitet die Eingabe, druckt das Ergebnis und fängt dann wieder an, auf Eingabe zu warten. Als Teil dieser „Hauptschleife" verwaltet und verwendet Mathematica verschiedene globale Objekte. Häufig werden Sie es nützlich finden, mit diesen Objekten zu arbeiten.

Sie sollten jedoch auch wissen, daß bei Einsatz einer speziellen Mathematica-Benutzeroberfläche diese ihre eigene Hauptschleife aufstellen kann und daß deshalb der Inhalt dieses Abschnittes dann nicht anwendbar ist.

Ein- und Ausgabe-Ausdrücke

In einer normalen interaktiven Session gibt es eine Folge von Ein- und Ausgabezeilen. Mathematica speichert die Werte der Ausdrücke dieser Zeilen in In[n] und Out[n].

Die Eingabe-Ausdrücke werden, wie es auch das übliche Prompt In[n]:= andeutet, mit verzögerten Zuweisungen gespeichert. Wann immer also nach In[n] gefragt wird, wird der Eingabe-Ausdruck in der aktuellen Umgebung erneut evaluiert.

Dies weist x einen Wert zu.

In[1]:= x = 7

Out[1]=

Jetzt wird der Wert für x verwendet.

In[2]:= x - x^2 + 5x - 1

Out[2]=

Dies entfernt den x zugewiesenen Wert.

In[3]:= x =.

Dies wird in der aktuellen Umgebung, in der es keinen x zugewiesenen Wert gibt, erneut evaluiert.

In[4]:= In[2]

Out[4]=

Dies liefert die Textform der zweiten Eingabezeile, die sich für Editierung oder andere Textmanipulation eignet.

In[5]:= InString[2] // InputForm

Out[5]//InputForm= "x - x^2 + 5x - 1"

Angabe der Länge der aufzubewahrenden Session-Geschichte

In der Voreinstellung speichert Mathematica Ihre gesamten Ein- und Ausgabezeilen für die Dauer der Session ab. In einer sehr langen Session beansprucht dies eventuell einen großen Teil des Computerspeichers. Sie können sich dieser Ein- und Ausgabezeilen aber entledigen, indem Sie die Werte von In und Out mit Unprotect[In, Out], gefolgt von Clear[In, Out] explizit löschen. Durch Einstellung der globalen Variablen $HistoryLength können Sie Mathematica auch anweisen, nur eine begrenzte Anzahl Zeilen aufzubewahren.

Beachten Sie: In einer Session kann man jederzeit den Zeilennummerzähler $Line ändern, so daß zum Beispiel neue Zeilen so numeriert werden, daß sie vorangehende überschreiben.

Globale Funktionen, die in der Hauptschleife verwendet werden

Mathematica stellt eine Reihe von „Haken" zur Verfügung, mit denen man Funktionen einfügen kann, die dann auf Ausdrücke in verschiedenen Stadien der Hauptschleife anzuwenden sind. So wird zum Beispiel eine Funktion, die der globalen Variablen $Pre als Wert zugewiesen wird, automatisch vor der Evaluierung auf jeden Ihrer Eingabe-Ausdrücke angewendet.

Für Eingabezeilen beginnt die normale Hauptschleife mit der Eingabe einer Zeichenkette. Insbesondere, wenn Sonderzeichen vorhanden sind, ist es häufig sinnvoll, diese Zeichenkette zu modifizieren, ehe sie weiter von Mathematica verarbeitet wird. Dies wird erreicht, indem man der globalen Variablen $PreRead als Wert eine Funktion zuweist. Diese Funktion wird auf die Zeichenkette angewendet, und das Ergebnis wird als eigentliche Eingabe-Zeichenkette für die jeweilige Eingabezeile verwendet.

Dies weist Mathematica an, in jeder Eingabe-Zeichenkette << ... >> durch ... zu ersetzen.

In[6]:= $PreRead = StringReplace[#, {"<<" -> "{", ">>" -> "}"}]&

Out[6]=

Sie können jetzt statt geschweifter Klammern doppelte spitze Klammern angeben.

In[7]:= <<4, 5, 6>>

Out[7]=

Sie können den Wert für $PreRead, wie hier geschehen, entfernen, außer wenn Ihre Definition von $PreRead genau diese Eingabe-Zeichenkette modifiziert.

In[8]:= $PreRead =.

Sobald eine $PreRead-Verarbeitung einer Eingabe-Zeichenkette beendet ist, wird die Zeichenkette von Mathematica eingelesen. An diesem Punkt stellt Mathematica vielleicht fest, daß die Zeichenkette einen Syntaxfehler enthält. Wenn dies geschieht, dann ruft Mathematica die Funktion auf, die Sie als Wert von $SyntaxHandler angegeben haben. Es stellt zwei Argumente zur Verfügung: die Eingabe-Zeichenkette und die Zeichenposition, an der der Syntaxfehler entdeckt wurde. Mit $SyntaxHandler können Sie zum Beispiel eine Analyse des Syntaxfehlers erzeugen oder einen Editor aufrufen. Wenn Ihre Funktion eine Zeichenkette liefert, dann wird Mathematica diese Zeichenkette als neue Eingabe-Zeichenkette verwenden.

Dies spezifiziert, was Mathematica tun sollte, wenn es einen Syntaxfehler entdeckt.

In[9]:= $SyntaxHandler =
(Print[StringForm["Fehler bei Zeichen `1` in `2`",
#2, #1]]; $Failed)&

Out[9]=

Diese Eingabe erzeugt einen Syntaxfehler.

In[10]:= 3 +/+ 5

Syntax::sntxf: "3 +" kann nicht von "/+ 5" gefolgt werden.

Sobald Mathematica erfolgreich einen Eingabe-Ausdruck gelesen hat, wird es diesen Ausdruck evaluieren. Vor Ausführung der Evaluierung wendet Mathematica eine Funktion an, die Sie allenfalls als Wert von $Pre angegeben haben, und nach der Evaluierung wendet es eine als Wert von $Post spezifizierte Funktion an. Beachten Sie: Falls die $Pre-Funktion ihre Argumente nicht unevaluiert beläßt, wird die Funktion genau dieselbe Wirkung wie $Post haben.

Mit $Post läßt sich eine beliebige „Nachverarbeitung" von Ergebnissen spezifizieren, die mit Mathematica erzielt wurden. Damit zum Beispiel Mathematica für jedes Ergebnis eine numerische Annäherung erzeugt, muß lediglich $Post = N angegeben werden.

Dies weist Mathematica an, N auf jedes erzeugte Ergebnis anzuwenden.

In[10]:= $Post = N

Out[10]=

Jetzt gibt Mathematica eine numerische Annäherung für alles, was Sie eintippen.

In[11]:= Sqrt[7]

Out[11]=

Dies entfernt die von Ihnen angegebene Nachverarbeitungs-Funktion.

In[12]:= $Post =.

Sobald Mathematica ein Ergebnis erzeugt und eine von Ihnen angegebene $Post-Funktion angewendet hat, nimmt es das Ergebnis und weist es Out[$Line] als Wert zu. Im nächsten Schritt wird Mathematica das Ergebnis drucken. Zuvor wird eine möglicherweise von Ihnen als Wert von $PrePrint angegebene Funktion angewendet.

Dies weist Mathematica an, die gesamte Ausgabe auf zwei Zeilen zu kürzen.

In[13]:= $PrePrint = Short[#, 2]& ;

Nur eine zweizeilige Version der Ausgabe wird jetzt gezeigt.

In[14]:= Expand[(x + y)^40]

Out[14]=

Dies entfernt den Wert, den Sie $PrePrint zugewiesen haben.

In[15]:= $PrePrint =.

Eine typische Mathematica-Session erzeugt verschiedene Arten Ausgabe. Im allgemeinen wird jede Ausgabeart zu einem bestimmten Ausgabekanal geschickt (siehe dazu Abschnitt 2.11.3). Mit jedem Ausgabekanal ist eine globale Variable verknüpft, die eine Liste der Ausgabeströme angibt, die in diesem Ausgabekanal enthalten sein sollen.

Ausgabekanäle in einer normalen Mathematica-Session

Durch Änderung der Strömeliste eines gegebenen Ausgabekanals lassen sich bestimmte Arten Mathematica-Ausgabe umleiten oder kopieren. So können Sie zum Beispiel durch Öffnen eines Ausgabestroms zu einer Datei und durch Aufnahme des Stroms in der $Echo-Liste erreichen, daß jede Ihrer Eingaben für Mathematica in einer Datei abgespeichert wird.

Offene Ströme in einer Mathematica-Session

Die Funktion Streams zeigt die gesamte Ein- und Ausgabe und die anderen Ströme, die zu einem bestimmten Zeitpunkt in einer Mathematica-Session offen sind. Die Variable $Input liefert den Namen des aktuellen Stroms, von dem Mathematica-Eingabe zu einem bestimmten Zeitpunkt genommen wird. $Input wird zum Beispiel während der Ausführung einer Get-Anweisung geändert.

Parameter für Meldungen

Verschiedene globale Parameter bestimmen die Form der von Mathematica erzeugten Meldungen.

Meldungen (siehe Abschnitt 2.8.21) enthalten in der Regel eine Folge von Ausdrücken, die durch StringForm mit dem Text der Meldung kombiniert werden. $MessagePrePrint liefert eine Funktion, die auf Ausdrücke angewendet werden soll, ehe sie gedruckt werden. Der Vorgabewert von $MessagePrePrint ist Short.

In Mathematica kann (siehe Abschnitt 2.8.22) die Sprache angegeben werden, mit der die Meldungen produziert werden sollen. In einer bestimmten Mathematica-Session kann $Language als Wert eine Liste mit Sprachnamen zugewiesen werden.

Terminieren von Mathematica-Sessionen

Mathematica wird die Hauptschleife fortsetzen, bis Mathematica explizit beendet wird. Die meisten Mathematica-Schnittstellen bieten dafür Spezialmethoden an. In jedem Fall kann dies aber immer durch Eingabe von Exit oder Quit erreicht werden.

Mathematica erlaubt die Zuweisung eines Wertes zur globalen Variablen $Epilog, um Operationen zu spezifizieren, die ausgeführt werden, unmittelbar bevor Mathematica tatsächlich verlassen wird. Auf diese Weise kann zum Beispiel erreicht werden, daß Mathematica bestimmte Objekte immer abspeichert, ehe es endet.

Eine globale Variable, die die Behandlung des Dateiende-Zeichens festlegt

Mathematica behandelt Sonderzeichen in der Regel nicht anders als andere Zeichen (siehe Abschnitt 2.7.5). Es gibt jedoch eine mögliche Ausnahme. Bei der Voreinstellung $IgnoreEOF = False erkennt Mathematica Dateiende-Zeichen. Wenn Mathematica in einer normalen interaktiven Mathematica-Session in einer bestimmten Zeile als einziges ein Dateiende-Zeichen empfängt, dann wird es die Session beenden.

Wie nun konkret ein Dateiende-Zeichen eingegeben wird, hängt von dem von Ihnen verwendeten Computersystem ab. Bei einem Unix-System wird zum Beispiel in der Regel Control-D eingetippt.

Beachten Sie: Wird Mathematica im „Stapel-Mode" eingesetzt, bei dem die gesamte Eingabe aus einer Datei stammt, dann wird es automatisch beendet werden, wenn es das Dateiende erreicht, wie auch immer der Wert von $IgnoreEOF sein mag.

InhaltDialoge