Next: Zuweisungsoperatoren, Previous: Logische Operatoren, Up: Operatoren [Contents][Index]

### 7.5 Operatoren für Gleichungen

Operator: #

  Ist der Operator für eine Ungleichung. `#` ist ein Infix-Operator mit zwei Operanden.

  Mit dem Operator `#` wird eine Ungleichung `a # b` formuliert, wobei die Operanden `a` und `b` jeweils die linke und die rechte Seite der Ungleichung sind und beliebige Ausdrücke sein können. Die Operanden werden ausgewertet, nicht jedoch die Ungleichung selbst.

  Die Funktionen `is`, `maybe`, die logischen Operatoren `and`, `or` und `not` sowie die Funktionen für die Definition von Programmanweisungen wie `if`, `while` oder `unless` erzwingen die Auswertung einer Ungleichung.

  Wegen der Regeln für die Auswertung von Aussagen und weil `not expr` die Auswertung des Argumentes `expr` bewirkt, ist der Ausdruck `not (a = b)` äquivalent zu `is(a # b)` und nicht zu `a # b`.

  Die Funktionen `rhs` und `lhs` geben die rechte und die linke Seite einer Gleichung oder Ungleichung zurück.

  Siehe auch den Operator `=`, um eine Gleichung zu formulieren, sowie die Funktionen `equal` und `notequal`.

  Beispiele:

      (%i1) a = b;
      (%o1)                         a = b
      (%i2) is (a = b);
      (%o2)                         false
      (%i3) a # b;
      (%o3)                         a # b
      (%i4) not (a = b);
      (%o4)                         true
      (%i5) is (a # b);
      (%o5)                         true
      (%i6) is (not (a = b));
      (%o6)                         true

Operator: =

  Ist der Operator für eine Gleichung. `=` ist ein Infix-Operator mit zwei Operanden.

  Mit dem Operator `=` wird eine Gleichung `a = b` formuliert, wobei die Operanden `a` und `b` jeweils die linke und die rechte Seite der Gleichung sind und beliebige Ausdrücke sein können. Die Operanden werden ausgewertet, nicht jedoch die Gleichung selbst. Nicht ausgewertete Gleichungen können als Argument von Funktionen wie zum Beispiel den Funktionen `solve`, `algsys` oder `ev` auftreten.

  Die Funktion `is` wertet eine Gleichung `=` zu einem booleschen Wert aus. `is(a = b)` wertet die Gleichung `a = b` zum Wert `true` aus, wenn `a` und `b` identische Ausdrücke sind. Das trifft zu, wenn `a` und `b` identische Atome sind oder wenn ihre Operatoren sowie die Operanden identisch sind. In jedem anderen Fall ist das Ergebnis `false`. Das Ergebnis der Auswertung ist nie `unkown`. Hat `is(a = b)` das Ergebnis `true`, werden `a` und `b` als syntaktisch gleich bezeichnet. Im Unterschied dazu gilt für äquivalente Ausdrücke, dass `is(equal(a, b))` den Wert `true` hat. Ausdrücke können äquivalent aber syntaktisch verschieden sein.

  Eine Ungleichung wird mit dem Operator `#` formuliert. Wie für den Operator `=` für eine Gleichung wird eine Ungleichung `a # b` nicht ausgewertet. Eine Auswertung erfolgt mit `is(a # b)`, welche die Werte `true` oder `false` als Ergebnis hat.

  Neben `is` werten auch die Operatoren `if`, `and`, `or` und `not` Gleichungen mit dem Operator `=` oder Ungleichungen mit dem Operator `#` zu den Werten `true` oder `false` aus.

  Wegen der Regeln für die Auswertung von Aussagen und weil im Ausdruck `not expr` der Operand `expr` ausgewertet wird, ist `not a = b` äquivalent zu `is(a # b)` und nicht zu `a # b`.

  Die Funktionen `rhs` und `lhs` geben die rechte und die linke Seite einer Gleichung oder Ungleichung zurück.

  Siehe auch den Operator `#` für Ungleichungen sowie die Funktionen `equal` und `notequal`.

  Beispiele:

  Ein Ausdruck `a = b` repräsentiert eine nicht ausgewertete Gleichung.

      (%i1) eq_1 : a * x - 5 * y = 17;
      (%o1)                    a x - 5 y = 17
      (%i2) eq_2 : b * x + 3 * y = 29;
      (%o2)                    3 y + b x = 29
      (%i3) solve ([eq_1, eq_2], [x, y]);
                              196         29 a - 17 b
      (%o3)          [[x = ---------, y = -----------]]
                           5 b + 3 a       5 b + 3 a
      (%i4) subst (%, [eq_1, eq_2]);
               196 a     5 (29 a - 17 b)
      (%o4) [--------- - --------------- = 17,
             5 b + 3 a      5 b + 3 a
                                        196 b     3 (29 a - 17 b)
                                      --------- + --------------- = 29]
                                      5 b + 3 a      5 b + 3 a
      (%i5) ratsimp (%);
      (%o5)                  [17 = 17, 29 = 29]

  `is(a = b)` wertet die Gleichung `a = b` zu `true` aus, wenn `a` und `b` syntaktisch gleich sind. Ausdrücke können äquivalent sein, ohne syntaktisch gleich zu sein.

      (%i1) a : (x + 1) * (x - 1);
      (%o1)                    (x - 1) (x + 1)
      (%i2) b : x^2 - 1;
                                    2
      (%o2)                        x  - 1
      (%i3) [is (a = b), is (a # b)];
      (%o3)                     [false, true]
      (%i4) [is (equal (a, b)), is (notequal (a, b))];
      (%o4)                     [true, false]

  Einige Operatoren werten `=` und `#` zu `true` oder `false` aus.

      (%i1) if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else
            BAR;
      (%o1)                          FOO
      (%i2) eq_3 : 2 * x = 3 * x;
      (%o2)                       2 x = 3 x
      (%i3) eq_4 : exp (2) = %e^2;
                                    2     2
      (%o3)                       %e  = %e
      (%i4) [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
      (%o4)                  [false, true, true]

  Da `not expr` die Auswertung des Ausdrucks `expr` bewirkt, ist `not (a = b)` äquivalent zu `is(a # b)`.

      (%i1) [2 * x # 3 * x, not (2 * x = 3 * x)];
      (%o1)                   [2 x # 3 x, true]
      (%i2) is (2 * x # 3 * x);
      (%o2)                         true

Next: Zuweisungsoperatoren, Previous: Logische Operatoren, Up: Operatoren [Contents][Index]