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 /  Evaluierung von Ausdrücken /

Evaluierung in IterationsfunktionenSchleifen und Kontrollstrukturen

2.5.8 Bedingte Anweisungen

Mathematica bietet verschiedene Wege zur Konstruktion von bedingten Anweisungen, die angeben, daß ein bestimmter Ausdruck nur dann evaluiert werden sollte, wenn gewisse Bedingungen zutreffen.

Konstrukte zur bedingten Ausführung

Der Test liefert False, deshalb wird der „sonst"-Ausdruck y zurückgegeben.

In[1]:= If[7 > 8, x, y]

Out[1]=

Nur der „sonst"-Ausdruck wird in diesem Fall evaluiert.

In[2]:= If[7 > 8, Print[x], Print[y]]

Wenn Sie mit Mathematica Programmen schreiben, werden Sie häufig die Wahl haben, eine einzelne Definition aufzustellen, deren rechte Seite mehrere durch If-Funktionen kontrollierte Verzweigungsmöglichkeiten enthält, oder mehrere Definitionen aufzustellen, die jeweils durch geeignete /;-Bedingungen kontrolliert werden. Durch Einsatz mehrerer Definitionen können Sie häufig Programme produzieren, die sowohl klarer als auch einfacher zu modifizieren sind.

Dies definiert eine Sprungfunktion mit dem Wert 1 für x > 0 und -1 sonst.

In[3]:= f[x_] := If[x > 0, 1, -1]

Dies definiert den positiven Teil der Sprungfunktion mit einer /;-Bedingung.

In[4]:= g[x_] := 1 /; x > 0

Hier ist der negative Teil der Sprungfunktion.

In[5]:= g[x_] := -1 /; x <= 0

Dies zeigt die vollständige Definition mit /;-Bedingungen.

In[6]:= ?g

Die Funktion If bietet einen Weg mit zwei Alternativen. Häufig wird es jedoch mehr als zwei Alternativen geben. Eine Möglichkeit besteht darin, einen verschachtelten Satz If-Funktionen einzusetzen. Gewöhnlich ist es jedoch besser, Funktionen wie Which und Switch zu verwenden.

Dies definiert eine Funktion mit drei Gebieten. Mit True als dem dritten Test wird der zugehörige Wert zum Vorgabewert.

In[7]:= h[x_] := Which[x < 0, x^2, x > 5, x^3, True, 0]

Dies verwendet den ersten Fall in Which.

In[8]:= h[-5]

Out[8]=

Dies verwendet den dritten Fall.

In[9]:= h[2]

Out[9]=

Dies definiert eine Funktion, die von den Werten ihrer Argumente modulo 3 abhängt.

In[10]:= r[x_] := Switch[Mod[x, 3], 0, a, 1, b, 2, c]

Mod[7, 3] ist 1, deshalb verwendet dies den zweiten Fall in Switch.

In[11]:= r[7]

Out[11]=

17 paßt weder zu 0 noch zu 1, aber zu _.

In[12]:= Switch[17, 0, a, 1, b, _, q]

Out[12]=

Ein bei symbolischen Systemen wie Mathematica wichtiger Punkt: Es kann sein, daß die von Ihnen gegebenen Bedingungen weder True noch False ergeben. Zum Beispiel ergibt die Bedingung x == y weder True noch False, solange x und y keine spezifizierten Werte, zum Beispiel numerische, haben.

In diesem Fall liefert der Test weder True noch False, deshalb bleiben beide Zweige im If-Teil unevaluiert.

In[13]:= If[x == y, a, b]

Out[13]=

Sie können ein spezielles viertes Argument zu If hinzufügen, das verwendet wird, wenn der Test weder True noch False ergibt.

In[14]:= If[x == y, a, b, c]

Out[14]=

Funktionen zum Arbeiten mit symbolischen Bedingungen

Mathematica beläßt dies als eine symbolische Gleichung.

In[15]:= x == y

Out[15]=

Außer wenn ausdr offensichtlich True ist, nimmt TrueQ[ausdr] an, daß ausdr False ist.

In[16]:= TrueQ[x == y]

Out[16]=

Im Unterschied zu == prüft ===, ob zwei Ausdrücke offensichtlich identisch sind. In diesem Fall sind sie es nicht.

In[17]:= x === y

Out[17]=

Der Hauptunterschied zwischen ls === rs und ls == rs besteht darin, daß === immer True oder False zurückgibt, während == die Eingabe in symbolischer Form belassen kann, die dann eine symbolische Gleichung darstellt (siehe Abschnitt 1.5.5). In der Regel sollten Sie === verwenden, wenn Sie die Struktur eines Ausdrucks prüfen wollen, und ==, wenn Sie mathematische Gleichheit testen wollen. Der Mathematica-Mustervergleicher verwendet im Grunde ===, um festzustellen, ob ein literaler Ausdruck zu einem anderen paßt.

Mit === können Sie die Struktur von Ausdrücken prüfen.

In[18]:= Head[a + b + c] === Times

Out[18]=

Der Operator == liefert ein weniger nützliches Ergebnis.

In[19]:= Head[a + b + c] == Times

Out[19]=

Bei der Konstruktion bedingter Anweisungen werden Sie häufig Testkombinationen verwenden müssen, wie zum Beispiel && && ... . Wichtig ist: Das Ergebnis aus dieser Testkombination wird dann False sein, wenn irgendeiner der False liefert. Mathematica evaluiert die immer der Reihe nach und stoppt, wenn irgendeiner der False liefert.

Evaluierung logischer Ausdrücke

Diese Funktion enthält eine Kombination von zwei Tests.

In[20]:= t[x_] := (x != 0 && 1/x < 3)

Hier werden beide Tests evaluiert.

In[21]:= t[2]

Out[21]=

Hier liefert der erste Test False, deshalb wird der zweite Test nicht versucht. Der zweite Test würde 1/0 enthalten und einen Fehler erzeugen.

In[22]:= t[0]

Out[22]=

Die Methode, mit der Mathematica logische Ausdrücke evaluiert, ermöglicht die Kombination von Testfolgen, in denen spätere Tests nur dann Sinn machen, wenn frühere positiv ausfallen. Dieses Verhalten, das Sie ähnlich auch in Sprachen wie C finden, erweist sich bei der Konstruktion von vielen Arten von Mathematica-Programmen als vorteilhaft.

Evaluierung in IterationsfunktionenSchleifen und Kontrollstrukturen