Nächste: Funktionen und Variablen für nutzerdefinierte Operatoren, Vorige: Nutzerdefinierte Operatoren, Nach oben: Nutzerdefinierte Operatoren [Inhalt][Index]
Es ist möglich neue Operatoren zu definieren, vorhandene Operatoren zu entfernen oder deren Eigenschaften zu ändern. Jede Funktion kann als ein Operator definiert werden, die Funktion kann, muss aber nicht definiert sein.
Im Folgenden werden die Operatoren dd
und "<-"
definiert. Nach
der Definition als Operatoren ist dd a
gleichbedeutend mit "dd"(a)
und a <- b
entspricht dem Funktionsaufruf "<-"(a,b)
. In diesem
Beispiel sind die Funktionen "dd"
und "<-"
nicht definiert.
(%i1) prefix ("dd"); (%o1) dd (%i2) dd a; (%o2) dd a (%i3) "dd" (a); (%o3) dd a (%i4) infix ("<-"); (%o4) <- (%i5) a <- dd b; (%o5) a <- dd b (%i6) "<-" (a, "dd" (b)); (%o6) a <- dd b
Maxima kennt die folgenden Funktionen, um Operatoren zu definieren:
prefix
, postfix
, infix
, nary
, matchfix
und
nofix
.
Der Vorrang eines Operators op vor anderen Operatoren leitet sich aus dem links- und rechtsseitigen Vorrang des Operators ab. Sind die links- und rechtsseitigen Vorränge von op beide größer als der links- und rechtsseitige Vorrang eines anderen Operators, dann hat op Vorrang vor diesem Operator. Sind die Vorränge nicht beide größer oder kleiner, werden weitere Regeln zur Bestimmung des Vorrangs herangezogen.
Maxima kennt die Wortart eines Operanden und des Ergebnisses eines Operanden.
Wortart bedeutet hier, den Typ eines Operanden. Maxima kennt die drei Typen
expr
, clause
und any
. Diese stehen für einen
algebraischen Ausdruck, einen logischen Ausdruck und einen beliebigen Ausdruck.
Mit Hilfe der für einen Operator definierten Wortart kann der Parser beim
Einlesen eines Ausdrucks Syntaxfehler feststellen.
Die Assoziativität eines Operators op hängt ab von seinem Vorrang. Ein größerer linksseitiger Vorrang hat zur Folge, dass der Operator op vor einem anderen Operator auf seiner linken Seite ausgewertet wird. Während ein größerer rechtsseitiger Vorrang zur Folge hat, dass der Operator vor anderen Operatoren auf der rechten Seite ausgewertet wird. Daraus folgt, dass ein größerer linksseitiger Vorrang lbp einen Operator op rechts-assoziativ und eine größerer rechtsseitiger Vorrang rbp den Operator links-assoziativ macht. Sind der links- und rechtsseitige Vorrang gleich groß, ist der Operator op links-assoziativ.
Mit den Befehlen remove
und kill
können Operatoreigenschaften
von einem Symbol entfernt werden. remove("a", op)
entfernt
die Operatoreigenschaften des Symbols a. kill("a")
entfernt
alle Eigenschaften einschließich der Operator-Eigenschaften des Symbols
a. In diesem Fall steht der Name des Symbols in Anführungszeichen.
(%i1) infix ("##"); (%o1) ## (%i2) "##" (a, b) := a^b; b (%o2) a ## b := a (%i3) 5 ## 3; (%o3) 125 (%i4) remove ("##", op); (%o4) done (%i5) 5 ## 3; Incorrect syntax: # is not a prefix operator 5 ## ^ (%i5) "##" (5, 3); (%o5) 125 (%i6) infix ("##"); (%o6) ## (%i7) 5 ## 3; (%o7) 125 (%i8) kill ("##"); (%o8) done (%i9) 5 ## 3; Incorrect syntax: # is not a prefix operator 5 ## ^ (%i9) "##" (5, 3); (%o9) ##(5, 3)
Nächste: Funktionen und Variablen für nutzerdefinierte Operatoren, Vorige: Nutzerdefinierte Operatoren, Nach oben: Nutzerdefinierte Operatoren [Inhalt][Index]