Programmer Guide/Command Reference/COND: Difference between revisions
From STX Wiki
Jump to navigationJump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{DISPLAYTITLE:{{SUBPAGENAME}}}} | {{DISPLAYTITLE:{{SUBPAGENAME}}}} | ||
The <code>COND</code> command performs a conditional assignment. | The <code>COND</code> command performs a conditional assignment. | ||
==Usage== | |||
<code>[<var>target</var> :=] COND [[Programmer_Guide/Introduction#Conditional_Expressions|condition]] ? <var>expr1</var> : <var>expr2</var> | |||
;<code>''target''</code>: is a normal assignment target, usually the name of an {{STX}} variable, e.g. <code>#var</code>. | ;<code>''target''</code>: is a normal assignment target, usually the name of an {{STX}} variable, e.g. <code>#var</code>. |
Revision as of 14:32, 27 April 2011
The COND
command performs a conditional assignment.
Usage
[target :=] COND condition ? expr1 : expr2
target
- is a normal assignment target, usually the name of an STx variable, e.g.
#var
.
condition
- is a conditional expression like used with the
IF
statement and the miscellaneous conditional control commands.
- Note that with conditional STx expressions there must always be intervening whitespaces between operators and their arguments (unless the argument is quoted). So, both
$#a == 7
and '$#a'=='7'
are valid expression, whereas $#a==7
is not.
expr1
and expr2
- Both
expr1
and expr2
may be any expressions that may be normally used in an assignment, with the only exception of a COND
expression (meaning that conditional assignments must not be nested for the time being). If, at runtime, the conditional expression condition
evaluates to truth, the value determined by the first expression, expr1
, will be assigned to target
. If condition
evaluates to falsehood, it will be the second expression, expr2
, that gets assigned to target.
You may use any STx conditional expression you like for condition
with the exception of conditions themselves containing the COND
keyword. Equally, there is no restriction on expr1
and expr2
, except that they must not be built up from COND
expressions themselves, either. It is even (and also) possible to use inline function calls ($(...)
), nesting them as deeply as one feels inclined to.
Notes
- The
COND
command is processed by the loader, and is therefore not available in the command line interface.
- The
COND
command may not contain a nested COND
command.
Examples
#min := cond $#a < $#b ? $#a : $#b // calculate minimum of #a and #b
#abs := cond $#a < 0 ? num -$#a : $#a // calculate absolute value of #a
#abs := cond $#a < 0 ? eval $#a*(-1) : $#a // an alternative to the above
#absdiff := cond $#a > $#b ? eval $#a-$#b : eval $#b-$#a // absolute difference
#len := cond $(length $#a) > 0 ? length $#a : length $#b // length of #a or, if empty, of #b
See the file conditional_assignment.sts
for further working examples.