EVAL
The EVAL
command can be used to evaluate numerical expressions. These expressions can be constants, scalar variables, vectors, matrices or EVAL
subcommands.
// if the variable #v does not exist then the following command // assigns a table item to #v. $#v := eval vv(1,2,3,4) // if #v is a value item, then #v remains a value item.
Syntax
An EVAL
command uses the following general syntax:
result := eval expression
result := evalcheck expression
An expression can be either a numerical expression, e.g.
result := eval (5 * 10) % 3
or a subcommand, e.g.
result := eval init(10,1,1)
or a combination thereof:
result := eval 5+max(fill(6,1,1))
If the expression is syntactically ill-formed, an error (EVAL
) or warning (EVALCHECK
) is reported. See the example script expression_check.sts
for details.
Numerical and Logical Operators
The EVAL
command supports the following numerical operators:
>
|
less than |
<
|
greater than |
<=
|
less than or equal to |
>=
|
greater than or equal to |
==
|
equal to |
!=
|
not equal to |
Note that two numbers/vectors/matrices are considered equal if (and only if)
(a) their dimensions are the same; and (b) all elements are numerically equal.
The EVAL
command also supports the following logical operators:
|
logical or | |
&&
|
logical and | |
!
|
unary not |
A C-like '? :'
operator is also supported:
result := eval 1 < 2 ? 1+2 : 1-2 // result is 3
Note that unlike C, nested uses of this operator must be surrounded by brackets, e.g.:
result := eval 1 > 2 ? (5 == 5 ? 5 : 0) : (4 == 5 ? 3 : 4) // returns 4
Examples
See the script eval_examples.sts
for an extensive list of examples.
Command History
The EVAL
command was added to the S_TOOLS-STx language in version 3.7.0. The EVAL
command replaces and extends the EVALUATE
command. If the EVAL
command is not assigning to an existing item, a table is assigned. Note that the current maximum number of arguments is 64 (S_TOOLS-STx version 3.8.0). As of version 3.7.0, S_TOOLS-STx has more numerical objects than just the scalars INT
and NUM
.