Frédéric: Logischer Fehler? Doppelte Bedingung

Hi,

Ich bin hier auf ein kleines Problem gestossen. Wahrscheinlich denke ich nicht logisch genug...

Wieso lässt sich diese doppelte Bedingung:

unless ($bedingung1) {
 unless ($bedingung2) {
  &fatal_error($error{21})
 }
}

nicht so vereinfachen:

unless ($bedingung1 && $bedingung2) {
 &fatal_error($error{21});
}

($bedingung1 und $bedingung2 = 0 oder 1)

Gruss,
Frédéric

  1. Hallo Frédéric,

    unless ($bedingung1) {
    unless ($bedingung2) {
      &fatal_error($error{21})
    }
    }

    Hier wird fatal_error() (lass bitte das & weg!) ausgefuehrt,
    wenn $bedingung1 falsch ist und $bedingung2 falsch ist.

    unless ($bedingung1 && $bedingung2) {
    &fatal_error($error{21});
    }

    Hier wird fatal_error() (lass bitte das & weg!) ausgefuehrt,
    wenn '$bedingung1 && $bedingung2' (also die UND-Verknuepfung
    von $bedingung1 und $bedingung2) false ergeben.

    Gruesse,
     CK

    1. Hallo,

      unless ($bedingung1 && $bedingung2) {
      &fatal_error($error{21});
      }

      Hier wird fatal_error() (lass bitte das & weg!) ausgefuehrt,
      wenn '$bedingung1 && $bedingung2' (also die UND-Verknuepfung
      von $bedingung1 und $bedingung2) false ergeben.

      ... darum genügt es hier, wenn nur eine der beiden Bedingungen false ergibt, dass die Funktion aufgerufen wird.
      Damit das gleiche Ergebnis erziel wird müsse es
        unless ($bedingung1 or $bedingung2) {
          ...
          }
      heißen, wobei mir diese Formulierung nicht so gefällt, da der Sinn vom (ungeübten) Betrachter nicht sofort erfasst werden kann.

      Grüße
        Klaus

      1. Hallo Klaus,

        ... darum genügt es hier, wenn nur eine der beiden
        Bedingungen false ergibt, dass die Funktion aufgerufen
        wird.

        Jepp.

        Damit das gleiche Ergebnis erziel wird müsse es
          unless ($bedingung1 or $bedingung2) {
            ...
            }
        heißen,

        unless(statement) ist halt ein if(!(statement)). Und die
        Negations-Regel sagt:

        !(a && b) == !a || !b

        Klammer-Regelung, wie in der Mathematik eben:

        a * (x + y) == ax + ay

        Gruesse,
         CK

        1. use Mosche;

          !(a && b) == !a || !b

          Klammer-Regelung, wie in der Mathematik eben:

          a * (x + y) == ax + ay

          <klugscheiss>Naja, das ganze heisste DeMorgan-Gesetz :-) </klugscheiss>

          use Tschoe qw(Matti);

          --
          $a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
          -12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
          $b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
          [0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}
          1. Hallo Matti,

            a * (x + y) == ax + ay

            <klugscheiss>Naja, das ganze heisste DeMorgan-Gesetz :-)
            </klugscheiss>

            Bitte was? Ich glaube, du meinst das 'Kommutativ-Gesetz' :)
            Oder meinst du das auf boolsche Operatoren bezogen? Da habe
            ich keine Ahnung, wie es heisst.

            Gruesse,
             CK

            1. use Mosche;

              a * (x + y) == ax + ay

              <klugscheiss>Naja, das ganze heisste DeMorgan-Gesetz :-)
              </klugscheiss>

              Bitte was? Ich glaube, du meinst das 'Kommutativ-Gesetz' :)

              Kommutativgesetz würde bedeuten:

              A && B == B && A
              bzw.:
              A || B == B || A

              Oder meinst du das auf boolsche Operatoren bezogen? Da habe
              ich keine Ahnung, wie es heisst.

              Das kommt aus der Mengenlehre.

              use Tschoe qw(Matti);

              --
              $a=n(1001010);print chr($a+=$_)for(0,43,-2,1,-84,65,13,1,5,
              -12,-3,13,-82,48,21,13,-6,-76,72,-7,2,8,-6,13,-104);sub n{
              $b=0;$_=0;for($c=length$_[0];$c;--$c){$_+=_($b)if substr$_
              [0],$c-1,1;$b++;}$_}sub _{($d)=@_;for($e=1;$d--;$e*=2){}$e}