EVAL
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.