|
2.13.2 Dialoge
Innerhalb einer normalen interaktiven Session läßt sich mit der Mathematica-Anweisung Dialog „Unter-Sessionen" oder Dialoge erzeugen. Dialoge sind häufig nützlich, wenn man mit Mathematica interagieren will, während es sich gerade inmitten einer Berechnung befindet. In Abschnitt 2.5.10 wird erwähnt, daß TraceDialog zum Beispiel automatisch Dialog an gewissen Punkten in der Evaluierung eines bestimmten Ausdrucks aufruft. Wenn Sie Mathematica während einer Berechnung unterbrechen, können Sie außerdem in der Regel mit einem Dialog den Zustand von Mathematica „untersuchen".
Initiieren von Dialogen und Rücksprung aus Dialogen
Dies initiiert einen Dialog.
In[1]:= Dialog[ ]
Berechnungen können in einem Dialog genauso wie in jeder Mathematica-Session ausgeführt werden.
In[2]:= 2^41
Out[2]= 
Mit Return können Sie einen Dialog verlassen.
In[3]:= Return[ ]
Out[1]= 
Bei Verlassen eines Dialogs kann mit Return[ausdr] ein Wert für den Dialog zurückgegeben werden. Soll kein Wert zurückgegeben werden und ist $IgnoreEOF = False gesetzt, dann kann ein Dialog auch einfach durch Angabe eines Dateiende-Zeichens verlassen werden, dies zumindest bei Systemen mit textorientierter Schnittstelle.
Zur Evaluierung dieses Ausdrucks initiiert Mathematica einen Dialog.
In[4]:= 1 + Dialog[ ]^2
Der vom Dialog zurückgegebene Wert a + b wird jetzt in den ursprünglichen Ausdruck eingefügt.
In[5]:= Return[a + b]
Out[2]= 
Beim Starten eines Dialogs wird ein „Anfangsausdruck" häufig nützlich sein. Wird Dialog[ausdr] eingesetzt, so wird Mathematica einen Dialog starten und ausdr als den Anfangsausdruck verwenden, auf den zum Beispiel als Wert von % zugegriffen werden kann.
Dies startet zuerst einen Dialog mit dem Anfangsausdruck a^2.
In[6]:= Map[Dialog, {a^2, b + c}]
Out[4]= 
% ist der Anfangsausdruck im Dialog.
In[7]:= %^2 + 1
Out[5]= 
Dies gibt einen Wert aus dem ersten Dialog zurück und beginnt den zweiten Dialog mit Anfangsausdruck b + c.
In[8]:= Return[%]
Out[4]= 
Dies liefert einen Wert aus dem zweiten Dialog. Das Endergebnis ist der ursprüngliche Ausdruck, in dem die Werte aus den zwei Dialogen eingefügt wurden.
In[9]:= Return[444]
Out[3]= 
Dialog startet im Grunde eine Unterversion der normalen Mathematica-Hauptschleife. Jeder gestartete Dialog „erbt" im Grunde verschiedene Werte der Gesamt-Hauptschleife. Einige der Werte sind jedoch lokal bezüglich des Dialogs, so daß ihre ursprünglichen Werte wiederhergestellt werden, wenn der Dialog verlassen wird.
So erben zum Beispiel Dialoge bei ihrem Start die aktuelle Zeilennummer $Line. Deshalb haben die Zeilen in einem Dialog Nummern, die sich der in der Hauptschleife verwendeten Sequenz anschließen. Aber trotzdem ist der Wert von $Line lokal bezüglich des Dialogs. Wenn Sie den Dialog verlassen, wird daher der Wert von $Line wieder zu dem, was er in der Hauptschleife war.
Wenn ein Dialog auf Zeile 10 der Mathematica-Session beginnt, dann wird die erste Zeile des Dialogs durch In[11] gekennzeichnet. Darauf folgende Zeilen des Dialoges werden als In[12], In[13] und so weiter gekennzeichnet. Wird dann der Dialog verlassen, wird die nächste Zeile in der Hauptschleife mit In[11] gekennzeichnet. An diesem Punkt kann man immer noch auf innerhalb des Dialoges erzeugte Ergebnisse mit Out[11], Out[12] usw. verweisen. Diese Ergebnisse werden jedoch überschrieben, sobald die Zeilen In[12], In[13] usw. in der Hauptschleife erreicht werden.
In einer normalen Mathematica-Session läßt sich feststellen, ob man sich in einem Dialog befindet, indem man prüft, ob die Ein- und Ausgabezeilen eingerückt sind. Wird ein Dialog von innerhalb eines Dialogs aufgerufen, so erhält man zwei Stufen der Einrückung. Im allgemeinen ergibt sich die Einrückung, die man im Innern von d verschachtelten Dialogen erhält, aus der Ausgabeform des Objektes DialogIndent[d]. Durch die Definition des Formates für dieses Objekt kann man spezifizieren, wie Dialoge in der Mathematica-Session angezeigt werden sollen.
Optionen für Dialog
Wie auch immer DialogSymbols spezifiziert sein mag, Dialog wird die Werte von $Line, $Epilog und $MessageList als lokal behandeln. Beachten Sie: Erhält $Epilog einen Wert, so wird dieser automatisch evaluiert, wenn der Dialog verlassen wird.
Wird Dialog aufgerufen, so wird es zuerst die Variablenwerte lokalisieren. Dann evaluiert es den Ausdruck, der allenfalls für die Option DialogProlog festgelegt wurde. Wurde für die Dialog-Funktion ein explizites Argument angegeben, so wird dieses als nächstes evaluiert. Schließlich wird der eigentliche Dialog gestartet.
Wird der Dialog verlassen, kann der Rücksprungwert explizit mit Return[ausdr] spezifiziert werden. Wenn dies nicht getan wird, wird der letzte im Dialog erzeugte Wert als Rücksprungwert genommen.
|