Programmer Guide/Command Reference/EVAL Intro/EVAL: Difference between revisions

From STX Wiki
Jump to navigationJump to search
m (1 revision: Initial import)
No edit summary
 
(14 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{DISPLAYTITLE:{{SUBPAGENAME}}}}
{{DISPLAYTITLE:{{SUBPAGENAME}}}}
==EVAL==
The <code>EVAL</code> command can be used to evaluate numerical, vector, and matrix expressions. These expressions may be built up from numerical constants, from scalar, vector, and matrix variables, and from a large number of [[Programmer Guide/Command Reference/EVAL_Intro/EVAL_Functions|EVAL functions]], and operators.
 
// if the variable #v does not exist then the following command
The <code>EVAL</code> command can be used to evaluate numerical expressions. These expressions can be constants, scalar variables, vectors, matrices or <code>[[Programmer Guide/Command Reference/EVAL/EVAL Subcommands|EVAL]]</code>[[Programmer Guide/Command Reference/EVAL/EVAL Subcommands| subcommands]].
// assigns a table item to #v.
 
$#v := eval vv(1,2,3,4)
<pre>
// if #v is a value item, then #v remains a value item.
// 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.
</pre>
Syntax


== Syntax ==
An <code>EVAL</code> command uses the following general syntax:
An <code>EVAL</code> command uses the following general syntax:
 
result := eval expression
<code>result := eval expression</code>
or
 
result := evalcheck expression
<code>result := evalcheck expression</code>
An expression may be either a numerical expression, e.g.
 
result := eval (5 * 10) % 3
An expression can be either a numerical expression, e.g.
 
<code>result := eval (5 * 10) % 3</code>
 
or a subcommand, e.g.
or a subcommand, e.g.
 
result := eval init(10,1,1)
<code>result := eval init(10,1,1)</code>
 
or a combination thereof:
or a combination thereof:
 
result := eval 5+max(fill(6,1,1))
<code>result := eval 5+max(fill(6,1,1))</code>


If the expression is syntactically ill-formed, an error (<code>EVAL</code>) or warning (<code>EVALCHECK</code>) is reported. See the example script <code>expression_check.sts</code> for details.
If the expression is syntactically ill-formed, an error (<code>EVAL</code>) or warning (<code>EVALCHECK</code>) is reported. See the example script <code>expression_check.sts</code> for details.


Numerical and Logical Operators
=== Numerical Objects ===
{{:Programmer_Guide/Command_Reference/EVAL_Intro/Numerical_objects}}


The <code>EVAL</code> command supports the following numerical operators:
=== Numerical Comparison Operators ===


The <code>EVAL</code> command supports the following numerical comparison operators:
{|
{|
|-
|-
Line 58: Line 48:


Note that two numbers/vectors/matrices are considered equal if (and only if)
Note that two numbers/vectors/matrices are considered equal if (and only if)
# their dimensions are the same; and
# all elements are numerically equal.


(a) their dimensions are the same; and
=== Logical Operators ===
(b) all elements are numerically equal.
 
The <code>EVAL</code> command also supports the following logical operators:


The <code>EVAL</code> command supports the following logical operators:
{|
{|
|-
|-
|<code>||</code>
|<code><nowiki>||</nowiki></code>
|logical or
|logical or
|-
|-
Line 76: Line 66:
|}
|}


A C<nowiki>-</nowiki>like '<code>? :'</code> operator is also supported:
A C<nowiki>-</nowiki>like '<code>? :'</code> selection operator is also supported:
 
result := eval 1 < 2 ? 1+2 : 1-2 // result is 3
<code>result := eval 1 < 2 ? 1+2 : 1-2 // result is 3</code>
 
Note that unlike C, nested uses of this operator must be surrounded by brackets, e.g.:
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) // result is 4
<code>result := eval 1 > 2 ? (5 == 5 ? 5 : 0) : (4 == 5 ? 3 : 4) // returns 4</code>
 
Examples
 
See the script <code>eval_examples.sts</code> for an extensive list of examples.
 
Command History
 
The <code>EVAL</code> command was added to the S_TOOLS-STx language in version 3.7.0. The <code>EVAL</code> command replaces and extends the <code>EVALUATE</code> command. If the <code>EVAL</code> 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 [[Programmer Guide/Command Reference/EVAL/Numerical objects|numerical objects]] than just the scalars <code>INT</code> and <code>NUM</code>.
 
{|
|-
|
|}

Latest revision as of 13:54, 1 April 2011

The EVAL command can be used to evaluate numerical, vector, and matrix expressions. These expressions may be built up from numerical constants, from scalar, vector, and matrix variables, and from a large number of EVAL functions, and operators.

// 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

or

result := evalcheck expression

An expression may 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 Objects

The following numerical objects are known to the EVAL command. The fields of the table item table are all numeric (you can use a parameter table). The value item value can contain numbers, vectors or matrices. The wave item wave is any wave item.

syntax description data type
constantNumber a scalar constant. E.g. 4.5 or 4 scalar
table the content of the whole table vector, matrix
table[i,*]

table[i,]

the i-th row of the table scalar, vector
table[*,j]

table[,j]

the j-th column of the table scalar, vector
table[i,j] the value of the i-th row and j-th column of the table scalar
value the content of the value item scalar, vector, matrix
value[i,*]

value[i,]

the i-th row of the value item scalar, vector
value[*,j]

value[,j]

the j-the column of the value item scalar, vector
value[i,j] the value of the i-th row and j-th column of the value item scalar
wave[!signal,*]

wave[!signal,]

the signal from all channels vector, matrix
wave[!signal,ch] the signal from channel ch (=1,2,...) vector
wave[!signal,*,b,l] the signal from all channels from sample b to sample b+l-1 vector, matrix
wave[!signal,ch,b,l] the signal from channel ch from sample b to sample b+l-1 vector

Numerical Comparison Operators

The EVAL command supports the following numerical comparison 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)

  1. their dimensions are the same; and
  2. all elements are numerically equal.

Logical Operators

The EVAL command supports the following logical operators:

|| logical or
&& logical and
! unary not

A C-like '? :' selection 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) // result is 4

Navigation menu

Personal tools