23.3.1 Conditional statements
The Xcas language has different ways of writing
“if…then” statements (see Section 4.1.3).
The standard version of such a statement consists of
the if keyword, followed by a boolean expression (see
Section 4.1) in parentheses, followed by a statement block
(see Section 23.1.7) which will be executed if the boolean
is true. You can optionally add an else
keyword followed by a statement block which will be executed if the boolean is false.
if (boolean) true-block ⟨else false-block⟩
Recall that the blocks need to be delimited by braces or by
begin and end.
Examples
a:=3:; b:=2:;
if (a>b) { a:=a+5; b:=a-b; }:;
a,b |
since a>b evaluates to true, and so the variable
a resets to 8 and b resets
to the value 6.
a:=3:; b:=2:;
if (a<b) { a:=a+5; b:=a-b; } else { a:=a-5; b:=a+b; }:;
a,b |
since a>b evaluates to false, and so the variable
a resets to -2 and b resets
to the value 0.
The “if…then…else…end” structure.
An alternate way to write an if statement is to enclose the
code block in then and
end instead of braces:
if (boolean) then true-block ⟨else false-block⟩ end
-
In this case, it is usually not necessary to enclose the boolean in parentheses.
- Instead of the keyword end, you can also use fi.
Examples
a:=3:;
if a>1 then a:=a+5; end |
a:=8:;
if a>10 then a:=a+10; else a:=a-5; end |
This input can also be written as:
si a>10 alors a:=a+10; sinon a:=a-5; fsi |
Nesting conditional statements.
Several if statements can be nested. For example:
if a>1 then a:=1; else if a<0 then a:=0; else a:=0.5; end; end |
A simpler way is to replace the else if by
elif and
combine the ends:
if a>1 then a:=1; elif a<0 then a:=0; else a:=0.5; end |
In general, such a combination can be written
if (boolean1) then |
block1; |
elif (boolean2) then |
block2; |
… |
elif (booleanN) then |
blockN; |
else |
last block; |
end
|
where the last else is optional.
For example, to define a function f by
f(x)=
| ⎧
⎪
⎪
⎨
⎪
⎪
⎩ | 8 | if x > 8 |
4 | if 4 < x ≤ 8 |
2 | if 2 < x ≤ 4 |
1 | if 0 < x ≤ 2 |
0 | if x ≤ 0
|
|
|
you may enter:
f(x):={
if (x>8) then
return 8;
elif (x>4) then
return 4;
elif (x>2) then
return 2;
elif (x>0) then
return 1;
else
return 0;
fi;
} |