if bool-expr1 then statements1
{ elif bool-expr2 then statements2 }
[ else
statements3 ]
fi;
The if statement allows one to execute statements depending on
the value of some boolean expression. The execution is done as follows.
First the expression bool-expr1 following the if is
evaluated. If it evaluates to true the statement sequence statements1
after the first then is executed, and the execution of the
if statement is complete.
Otherwise the expressions bool-expr2 following the elif
are evaluated in turn. There may be any number of elif parts,
possibly none at all. As soon as an expression evaluates to true
the corresponding statement sequence statements2 is executed and
execution of the if statement is complete.
If the if expression and all, if any, elif
expressions evaluate to false and there is an else
part, which is optional, its statement sequence statements3 is
executed and the execution of the if statement is complete. If
there is no else part the if statement is complete
without executing any statement sequence.
Since the if statement is terminated by the fi
keyword there is no question where an else part belongs, i.e.,
GAP has no dangling else.
In if expr1
then if expr2 then stats1 else stats2 fi; fi;
the else part belongs to the second if statement,
whereas in
if expr1 then if expr2 then stats1
fi; else stats2 fi;
the else part belongs
to the first if statement.
Since an if statement is not an expression it is not possible to write
abs := if x > 0 then x; else -x; fi;
which would, even if legal syntax, be meaningless, since the if
statement does not produce a value that could be assigned to abs.
If one expression evaluates neither to true nor to false
an error is signalled and a break loop (see Break Loops) is entered. As usual
you can leave the break loop with quit;. If you enter return
true;, execution of the if statement continues as if the
expression whose evaluation failed had evaluated to true.
Likewise, if you enter return false;, execution of the if
statement continues as if the expression whose evaluation failed had
evaluated to false.
gap> i := 10;;
gap> if 0 < i then
> s := 1;
> elif i < 0 then
> s := -1;
> else
> s := 0;
> fi;
gap> s;
1 # the sign of i