The two boolean values are true and false. They stand for the
logical values of the same name. They appear mainly as values of the
conditions in if-statements and while-loops.
This chapter contains sections describing the operations that are available for the boolean values (see Comparisons of Booleans, Operations for Booleans).
Further this chapter contains a section about the function IsBool (see
IsBool). Note that it is a convention that the name of a function that
tests a property, and returns true and false according to the
outcome, starts with Is, as in IsBool.
bool1 = bool2, bool1 <> bool2
The equality operator = evaluates to true if the two boolean values
bool1 and bool2 are equal, i.e., both are true or both are false,
and false otherwise. The inequality operator <> evaluates to true
if the two boolean values bool1 and bool2 are different and false
otherwise. This operation is also called the exclusive or, because its
value is true if exactly one of bool1 or bool2 is true.
You can compare boolean values with objects of other types. Of course they are never equal.
gap> true = false;
false
gap> false = (true = false);
true
gap> true <> 17;
true
bool1 < bool2, bool1 <= bool2,
bool1 > bool2, bool1 >= bool2
The operators <, <=, >, and => evaluate to true if the
boolean value bool1 is less than, less than or equal to, greater than,
and greater than or equal to the boolean value bool2. The ordering of
boolean values is defined by true < false.
You can compare boolean values with objects of other types. Integers, rationals, cyclotomics, permutations, and words are smaller than boolean values. Objects of the other types, i.e., functions, lists, and records are larger.
gap> true < false;
true
gap> false >= true;
true
gap> 17 < true;
true
gap> true < [17];
true
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
IsBool( obj )
IsBool returns true if obj, which may be an object of an arbitrary
type, is a boolean value and false otherwise. IsBool will signal an
error if obj is an unbound variable.
gap> IsBool( true );
true
gap> IsBool( false );
true
gap> IsBool( 17 );
false
gap3-jm