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 /  Transformationsregeln und Definitionen /

Definitionen für Funktionen erstellenSofortige und verzögerte Definitionen

2.4.7 Die Reihenfolge von Definitionen

Wenn Sie eine Folge von Definitionen in Mathematica erstellen, können einige allgemeiner als andere sein. Mathematica folgt dem Prinzip, daß versucht werden soll, allgemeinere Definitionen nach spezielleren zu setzen. Das bedeutet, daß Spezialfälle für Regeln gewöhnlich vor den allgemeineren Fällen getestet werden.

Dieses Verhalten ist entscheidend für das Beispiel der Fakultäts-Funktion aus dem vorangegangenen Abschnitt. Unabhängig von der Reihenfolge, in der Sie sie eingegeben haben, wird Mathematica immer die Regel für den Spezialfall f[1] vor die Regel für den allgemeinen Fall f[n_] stellen. Wenn also Mathematica nach dem Wert eines Ausdrucks der Form f[n] sucht, so probiert es zunächst den Spezialfall f[1], und nur, wenn dieser nicht anwendbar ist, probiert es den allgemeinen Fall f[n_]. Infolgedessen wird Mathematica, wenn Sie nach f[5] fragen, so lange die allgemeine Regel benutzen, bis die „End-Bedingungs"-Regel für f[1] anwendbar ist.

Behandlung von Definitionen in Mathematica

Würde Mathematica nicht dem Prinzip folgen, daß spezielle Regeln vor allgemeinere gestellt werden, so ständen die speziellen Regeln immer im „Schatten" der allgemeineren. In dem Beispiel der Fakultät würde Mathematica, falls die Regel für f[n_] vor der Regel für f[1] stände, die allgemeine Regel f[n_] sogar dann benutzen, wenn es f[1] evaluieren wollte, und es würde niemals die spezielle Regel f[1] finden.

Hier ist eine allgemeine Definition für f[n_].

In[1]:= f[n_] := n f[n-1]

Hier ist eine Definition für den Spezialfall f[1].

In[2]:= f[1] = 1

Out[2]=

Mathematica stellt den speziellen Fall vor den allgemeinen.

In[3]:= ?f

Im oben benutzten Beispiel der Fakultäts-Funktion ist es klar, welche Regel die allgemeinere ist. Oft gibt es jedoch keine definitive Reihenfolge für die Allgemeinheit der von Ihnen gegebenen Regeln. In solchen Fällen probiert Mathematica einfach die Regeln in der durch Ihre Eingabe gegebenen Reihenfolge.

Diese Regeln haben keine definitive Reihenfolge in Bezug auf Allgemeinheit.

In[4]:= log[x_ y_] := log[x] + log[y] ; log[x_^n_] := n log[x]

Mathematica speichert die Regeln in der Reihenfolge, in der Sie sie gegeben haben.

In[5]:= ?log

Diese Regel ist ein Spezialfall der Regel für log[x_ y_].

In[6]:= log[2 x_] := log[x] + log2

Mathematica stellt die spezielle Regel vor die allgemeinere.

In[7]:= ?log

Obwohl Mathematica in vielen praktischen Fällen erkennen kann, wann eine Regel allgemeiner als eine andere ist, sollten Sie sich darüber klar sein, daß dies nicht immer möglich ist. Wenn zwei Regeln zum Beispiel beide komplizierte Bedingungen mit /; enthalten, ist es vielleicht unmöglich, herauszufinden, welche die allgemeinere ist, und es mag tatsächlich keine definitive Reihenfolge existieren. Wenn die entsprechende Reihenfolge jemals unklar ist, speichert Mathematica die Regeln in der von Ihnen gegebenen Reihenfolge.

Definitionen für Funktionen erstellenSofortige und verzögerte Definitionen