Next: Operatoren für Gleichungen, Previous: Relationale Operatoren, Up: Operatoren [Contents][Index]

### 7.4 Logische Operatoren

Operator: and

  Ist der logische Operator der Konjunktion. `and` ist ein N-ary-Operator. Die Operanden sind boolesche Ausdrücke und das Ergebnis ist ein boolescher Wert.

  Der Operator `and` erzwingt die Auswertung aller oder einen Teil der Operanden. Die Operanden werden in der Reihenfolge ausgewertet, in der sie auftreten. `and` wertet nur so viele Operanden aus, wie nötig sind, um das Ergebnis des Ausdrucks zu bestimmen. Hat irgendein Argument den Wert `false`, ist das Ergebnis `false` und die weiteren Argumente werden nicht ausgewertet.

  Die Optionsvariable `prederror` kontrolliert das Verhalten von `and` für den Fall, dass ein Operand nicht zu `true` oder `false` ausgewertet werden kann. `and` gibt eine Fehlermeldung aus, wenn `prederror` den Wert `true` hat. Andernfalls werden Operanden akzeptiert, die nicht zu `true` oder `false` ausgewertet werden können und das Ergebnis ist ein boolescher Ausdruck.

  `and` ist nicht kommutativ, da aufgrund von nicht ausgewerteten Operanden die Ausdrücke `a and b` und `b and a` ein unterschiedliches Ergebnis haben können.

  Beispiele:

      (%i1) n:2;
      (%o1)                           2
      (%i2) integerp(n) and evenp(n);
      (%o2)                         true
      (%i3) not(a=b) and 1=1 and integerp(2);
      (%o3)                         true
      (%i4) not(a=b) and 1=1 and oddp(2);
      (%o4)                         false
      (%i5) a and b;
      (%o5)                        a and b
      (%i6) prederror:true$
      (%i7) a and b;

      Unable to evaluate predicate a
       -- an error. To debug this try: debugmode(true);

  Da `and` nur so viele Operanden auswertet wie notwendig sind, um das Ergebnis festzustellen, führt der syntaktische Fehler im zweiten Operanden nicht zu einer Fehlermeldung, das das Ergebnis bereits mit dem ersten Operanden feststeht.

      (%i8) a=b and sin(2,2);
      (%o8)                         false

Operator: or

  Ist der logische Operator der Disjunktion. `or` ist ein N-ary-Operator. Die Operanden sind boolesche Ausdrücke und das Ergebnis ist ein boolescher Wert.

  Der Operator `or` erzwingt die Auswertung aller oder einen Teil der Operanden. Die Operanden werden in der Reihenfolge ausgewertet, in der sie auftreten. `or` wertet nur so viele Operanden aus wie nötig sind, um das Ergebnis des Ausdrucks zu bestimmen. Hat irgendein Operand den Wert `true`, ist das Ergebnis `true` und die weiteren Operanden werden nicht ausgewertet.

  Die Optionsvariable `prederror` kontrolliert das Verhalten von `or` für den Fall, dass ein Operand nicht zu `true` oder `false` ausgewertet werden kann. `or` gibt eine Fehlermeldung, wenn `prederror` den Wert `true` hat. Andernfalls werden Operanden akzeptiert, die nicht zu `true` oder `false` ausgewertet werden können und das Ergebnis ist ein boolescher Ausdruck.

  `or` ist nicht kommutativ, da aufgrund von nicht ausgewerteten Operanden die Ausdrücke `a or b` und `b or a` ein unterschiedliches Ergebnis haben können.

  Beispiele:

      (%i1) n:2;
      (%o1)                           2
      (%i2) oddp(n) or evenp(n);
      (%o2)                         true
      (%i3) a=b or not(1=1) or integerp(2);
      (%o3)                         true
      (%i4) a or b;
      (%o4)                        a or b
      (%i5) prederror:true$
      (%i6) a or b;

      Unable to evaluate predicate a
       -- an error. To debug this try: debugmode(true);

  Da `or` nur so viele Operanden auswertet wie notwendig sind, um das Ergebnis festzustellen, führt der syntaktische Fehler im zweiten Operanden nicht zu einer Fehlermeldung, da das Ergebnis bereits mit dem ersten Operanden feststeht.

      (%i7) integerp(2) or sin(2,2);
      (%o7)                         true

Operator: not

  Ist die logische Negation. `not` ist ein Prefix-Operator. Der Operand ist ein boolescher Ausdruck und das Ergebnis ein boolescher Wert.

  Der Operator `not` erzwingt die Auswertung des Operanden. Die Optionsvariable `prederror` kontrolliert das Verhalten von `not` für den Fall, dass der Operand nicht zu `true` oder `false` ausgewertet werden kann. `not` gibt eine Fehlermeldung, wenn `prederror` den Wert `true` hat. Andernfalls wird ein Operand akzeptiert, der nicht zu `true` oder `false` ausgewertet werden kann, und das Ergebnis ist ein boolescher Ausdruck.

  Beispiele:

      (%i1) not integerp(2);
      (%o1)                         false
      (%i2) not (a=b);
      (%o2)                         true
      (%i3) not a;
      (%o3)                         not a
      (%i4) prederror:true$
      (%i5) not a;

      Unable to evaluate predicate a
       -- an error. To debug this try: debugmode(true);

Next: Operatoren für Gleichungen, Previous: Relationale Operatoren, Up: Operatoren [Contents][Index]