6.1.3 Defining functions with boolean tests: ifte ?: when
You can use boolean tests to define functions not given by a single
simple formula. Notably, you can use the ifte command or
?: operator to define piecewise-defined functions.
-
ifte takes three arguments:
-
condition, a boolean condition.
- true-result, the result to return if
condition is true.
- false-result, the result to return if
condition is false.
- ifte(condition, true-result,
false-result) returns true-result if
condition is true and returns false-result if
condition if false.
Example.
You can define your own absolute value function with:
Input:
myabs(x):= ifte(x >= 0, x, -1*x)
Afterwards, entering:
Input:
myabs(-4)
will return:
However, myabs will return an error if it can’t evaluate the
condition.
Input:
myabs(x)
Output:
Ifte: Unable to check test Error: Bad Argument Value
The ?: construct behaves similarly to ifte, but is
structured differently and doesn’t return an error if the condition
can’t be evaluated.
-
The ?: construct takes three arguments:
-
condition, a boolean condition.
- true-result, the result to return if
condition is true.
- false-result, the result to return if
condition is false.
- condition?true-result:false-result
returns true-result if condition is true and
returns false-result if condition if false.
Example.
You can define your absolute value function with
myabs(x):= (x >= 0)? x: -1*x
If you enter
myabs(-4)
you will again get
4
but now if the conditional can’t be evaluated, you won’t get an error.
Input:
myabs(x)
Output:
((x >= 0)? x: -x)
The when and IFTE commands
are prefixed synonyms for the ?: construct.
-
when (and IFTE) take three arguments:
-
condition, a boolean condition.
- true-result, the result to return if
condition is true.
- false-result, the result to return if
condition is false.
- when(condition, true-result,
false-result) (and
IFTE(condition, true-result,
false-result)) return true-result if
condition is true and returns false-result if
condition if false.
(condition)? true-result: false-result
when(condition, true-result, false-result)
and
IFTE(condition, true-result, false-result)
all represent the same expression.
If you want to define a function with several pieces, it may be
simpler to use the piecewise function.
-
piecewise takes an unspecified (odd) number of
arguments:
-
cond1, return1,
cond2, return2, …, condn,
returnn, an arbitrary number of pairs
of conditions and corresponding return values.
- default, a result to return if none of the
conditions are true.
- piecewise(cond1, return1,
…, condn, returnn, default) returns
returnk if condk is the
first true condition, or default if none of
the conditions are true.
Example.
To define
f(x) =
| ⎧
⎪
⎨
⎪
⎩ | −2 | if x < −2 |
3x+4 | if −2 ≤ x < −1 |
1 | if −1 ≤ x < 0 |
x + 1 | if x ≥ 0
|
|
|
you can enter:
Input:
f(x):= piecewise(x < -2, -2, x < -1, 3*x+4, x < 0, 1, x + 1)