44.2 Operations for Booleans

bool1 or bool2

The logical operator or evaluates to true if at least one of the two boolean operands bool1 and bool2 is true and to false otherwise.

or first evaluates bool1. If the value is neither true nor false an error is signalled. If the value is true, then or returns true without evaluating bool2. If the value is false, then or evaluates bool2. Again, if the value is neither true nor false an error is signalled. Otherwise or returns the value of bool2. This short-circuited evaluation is important if the value of bool1 is true and evaluation of bool2 would take much time or cause an error.

or is associative, i.e., it is allowed to write b1 or b2 or b3, which is interpreted as (b1 or b2) or b3. or has the lowest precedence of the logical operators. All logical operators have lower precedence than the comparison operators =, <, in, etc.

    gap> true or false;
    true
    gap> false or false;
    false
    gap> i := -1;;  l := [1,2,3];;
    gap> if i <= 0 or l[i] = false  then Print("aha\n");  fi;
    aha    # no error, because 'l[i]' is not evaluated 

bool1 and bool2

The logical operator and evaluates to true if both boolean operands bool1 and bool2 are true and to false otherwise.

and first evaluates bool1. If the value is neither true nor false an error is signalled. If the value is false, then and returns false without evaluating bool2. If the value is true, then and evaluates bool2. Again, if the value is neither true nor false an error is signalled. Otherwise and returns the value of bool2. This short-circuited evaluation is important if the value of bool1 is false and evaluation of bool2 would take much time or cause an error.

and is associative, i.e., it is allowed to write b1 and b2 and b3, which is interpreted as (b1 and b2) and b3. and has higher precedence than the logical or operator, but lower than the unary logical not operator. All logical operators have lower precedence than the comparison operators =, <, in, etc.

    gap> true and false;
    false
    gap> true and true;
    true
    gap> false and 17;
    false    # is no error, because '17' is never looked at 

not bool

The logical operator not returns true if the boolean value bool is false and true otherwise. An error is signalled if bool does not evaluate to true or false.

not has higher precedence than the other logical operators, or and and. All logical operators have lower precedence than the comparison operators =, <, in, etc.

    gap> not true;
    false
    gap> not false;
    true 

Previous Up Top Next
Index

GAP 3.4.4
April 1997