2.14 If

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 

Previous Up Top Next
Index

GAP 3.4.4
April 1997