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 /

Reduzierung von Ausdrücken in ihre Standard-FormDas Standard-Evaluierungsverfahren

2.5.3 Attribute

Definitionen wie zum Beispiel f[x_] = x^2 spezifizieren Werte für Funktionen. Mitunter möchte man jedoch allgemeine Eigenschaften von Funktionen spezifizieren, ohne explizite Werte angeben zu müssen.

Mathematica bietet eine Auswahl von Attributen, die Sie einsetzen können, um diverse Eigenschaften von Funktionen zu spezifizieren. Zum Beispiel können Sie mit dem Attribut Flat spezifizieren, daß eine spezielle Funktion „flach" ist, so daß verschachtelte Aufrufe automatisch eingeebnet werden, und sie sich so verhält, als wäre sie assoziativ.

Hiermit wird der Funktion f das Attribut Flat zugewiesen.

In[1]:= SetAttributes[f, Flat]

Jetzt verhält sich f als flache oder assoziative Funktion, so daß verschachtelte Aufrufe automatisch eingeebnet werden.

In[2]:= f[f[a, b], c]

Out[2]=

Attribute wie Flat können nicht nur die Evaluierung, sondern auch Operationen wie etwa Mustervergleiche beeinflussen. Wenn Sie Definitionen oder Transformationsregeln für eine Funktion angeben, so müssen Sie sicherstellen, daß Sie zuerst die Attribute der Funktion angeben.

Hier ist eine Definition für die flache Funktion f.

In[3]:= f[x_, x_] := f[x]

Da f flach ist, wird die Definition automatisch auf jede Unterfolge von Argumenten angewendet.

In[4]:= f[a, a, a, b, b, b, c, c]

Out[4]=

Attribute von Symbolen manipulieren

Dies zeigt die f zugewiesenen Attribute.

In[5]:= Attributes[f]

Out[5]=

Dies entfernt die f zugewiesenen Attribute.

In[6]:= Attributes[f] = { }

Out[6]=

Die vollständige Attribut-Liste für die Symbole in Mathematica

Dies sind die Attribute für die eingebaute Funktion Plus.

In[7]:= Attributes[Plus]

Out[7]=

Ein wichtiges Attribut, das allen eingebauten mathematischen Funktionen in Mathematica zugewiesen ist, ist das Attribut Listable. Dieses Attribut spezifiziert, daß eine Funktion automatisch über solche Listen distributiert oder „verteilt" werden sollte, die als ihre Argumente erscheinen. Dies führt dazu, daß die Funktion im Grunde separat auf jedes Element in allen Listen angewendet wird, die als ihre Argumente erscheinen.

Die eingebaute Log-Funktion ist Listable.

In[8]:= Log[{5, 8, 11}]

Out[8]=

Dies definiert die Funktion p als listbar.

In[9]:= SetAttributes[p, Listable]

Jetzt wird p automatisch über Listen verteilt, die als Argumente erscheinen.

In[10]:= p[{a, b, c}, d]

Out[10]=

Viele der Attribute, die Sie Funktionen zuweisen können, wirken sich direkt auf die Evaluierung dieser Funktionen aus. Einige Attribute wirken sich jedoch nur auf andere Aspekte bei der Behandlung von Funktionen aus. Zum Beispiel beeinflußt das Attribut OneIdentity nur den Mustervergleich (siehe Abschnitt 2.3.7). Das Attribut Constant ist gleichfalls nur für die Differentiation und für Operationen relevant, die auf der Differentiation basieren.

Das Attribut Protected wirkt sich auf Zuweisungen aus. Mathematica erlaubt Ihnen nicht, Definitionen aufzustellen, die sich auf ein Symbol beziehen, das dieses Attribut trägt. Mit den in Abschnitt 2.4.12 behandelten Funktionen Protect und Unprotect kann alternativ zu SetAttributes und ClearAttributes dieses Attribut gesetzt oder gelöscht werden. In Abschnitt 2.4.12 wird erwähnt, daß die meisten eingebauten Mathematica-Objekte anfangs geschützt sind, so daß Sie ungewollt keine Definitionen für sie aufstellen können.

Dies ist eine Definition für die Funktion g.

In[11]:= g[x_] = x + 1

Out[11]=

Hiermit erhält g das Attribut Protected.

In[12]:= Protect[g]

Out[12]=

Jetzt können Sie die Definition von g nicht modifizieren.

In[13]:= g[x_] = x

Out[13]=

Normalerweise können Sie die von Ihnen aufgestellten Definitionen für ein Symbol durch Eingabe von ?f oder durch Einsatz einer Reihe eingebauter Mathematica-Funktionen sehen. Wenn Sie jedoch das Attribut ReadProtected festlegen, dann wird Mathematica Ihnen nicht erlauben, sich die Definition des betreffenden Symbols anzuschauen. Mathematica wird diese Definition trotzdem weiterhin bei der Evaluierung verwenden.

Obwohl Sie das Symbol nicht modifizieren können, können Sie sich noch die Definition von g anschauen.

In[14]:= ?g

Hiermit erhält g das Attribut ReadProtected.

In[15]:= SetAttributes[g, ReadProtected]

Jetzt können Sie die Definition von g nicht mehr lesen.

In[16]:= ?g

Funktionen wie SetAttributes und ClearAttributes erlauben Ihnen gewöhnlich, die Attribute eines Symbols beliebig zu ändern. Sobald Sie jedoch einem Symbol das Attribut Locked geben, wird Mathematica Ihnen für den Rest Ihrer Mathematica-Session nicht erlauben, die Attribute des Symbols zu modifizieren. Mit dem Attribut Locked, zusätzlich zu Protected oder ReadProtected, können Sie es Anwendern verwehren, Definitionen zu modifizieren oder zu lesen.

Löschen von Werten und Attributen

Hiermit werden Werte und Attribute des Symbols p gelöscht, das oben das Attribut Listable erhielt.

In[17]:= ClearAll[p]

Nun ist p nicht mehr listbar.

In[18]:= p[{a, b, c}, d]

Out[18]=

Mit Attribut-Definitionen spezifizieren Sie Eigenschaften, die Mathematica annehmen soll, sobald die Funktion auftaucht. Häufig sollen die Eigenschaften jedoch nur in einem speziellen Fall gelten. Dann ist es besser, keine Attribute zu verwenden, sondern stattdessen eine geeignete Funktion aufzurufen, um die mit dem Attribut verbundene Transformation zu implementieren.

Durch expliziten Aufruf von Thread können Sie die Transformation implementieren, die automatisch erfolgen würde, wenn p listbar wäre.

In[19]:= Thread[p[{a, b, c}, d]]

Out[19]=

Funktionen, die mit einigen Attributen verknüpfte Transformationen ausführen

Attribute in Mathematica können permanent nur für einzelne Symbole definiert werden. Mathematica erlaubt Ihnen jedoch auch, reine Funktionen aufzustellen, die sich so verhalten, als ob sie Attribute hätten.

Reine Funktionen mit Attributen

Diese reine Funktion wendet p auf die gesamte Liste an.

In[20]:= Function[{x}, p[x]] [{a, b, c}]

Out[20]=

Durch Hinzufügen des Attributs Listable wird die Funktion über die Elemente der Liste verteilt, ehe p angewendet wird.

In[21]:= Function[{x}, p[x], {Listable}] [{a, b, c}]

Out[21]=

Reduzierung von Ausdrücken in ihre Standard-FormDas Standard-Evaluierungsverfahren