Programmer Guide/Command Reference/EVAL: Difference between revisions

From STX Wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 1: Line 1:
{{DISPLAYTITLE:{{SUBPAGENAME}}}}__TOC__
{{DISPLAYTITLE:{{SUBPAGENAME}}}}__TOC__
== Introduction ==
== Introduction ==
{{:Programmer_Guide/Command_Reference/EVAL_Intro/EVAL}} <!-- C.G. 22.3.2011 -->
The <code>EVAL</code> command can be used to evaluate numerical expressions. These expressions may be built up from numerical constants, from scalar, vector, and matrix variables, and from a large number of [[#Functions|functions]] and [[#Operators|operators]].
 
== Syntax ==
An <code>EVAL</code> command uses the following general syntax:
'''result''' '':= eval'' '''expression'''
or
'''result''' '':= evalcheck'' '''expression'''
;'''result''': This is the target to be assigned with the result of the evaluation of the numerical ''expression'''. The result can be a shell variable, a [[Programmer_Guide/Shell_Items]] or a [[#Numerical objects|numerical object]]
;'''exprerssion''': The numerical expression to be evaluated. The expression consists of [[#Numerical objects|numerical objects]], [[#Functions|functions]] and [[#Operators|operators]].
 
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 (<code>EVAL</code>) or warning (<code>EVALCHECK</code>) is reported. See the example script <code>expression_check.sts</code> for details.
 
=== Numerical Objects ===
{{:Programmer_Guide/Command_Reference/EVAL_Intro/Numerical_objects}}
 
=== Numerical Comparison Operators ===
 
The <code>EVAL</code> command supports the following numerical comparison operators:
{|
|-
|<code>></code>
|less than
|-
|<code><</code>
|greater than
|-
|<code><=</code>
|less than or equal to
|-
|<code>>=</code>
|greater than or equal to
|-
|<code>==</code>
|equal to
|-
|<code>!=</code>
|not equal to
|}
 
Note that two numbers/vectors/matrices are considered equal if (and only if)
# their dimensions are the same; and
# all elements are numerically equal.
 
=== Logical Operators ===
 
The <code>EVAL</code> command supports the following logical operators:
{|
|-
|<code><nowiki>||</nowiki></code>
|logical or
|-
|<code>&&</code>
|logical and
|-
|<code>!</code>
|unary not
|}
 
A C<nowiki>-</nowiki>like '<code>? :'</code> 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
 


=== EVAL subcommands ===
=== EVAL subcommands ===

Revision as of 10:18, 31 March 2011

Introduction

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

Syntax

An EVAL command uses the following general syntax:

result := eval expression

or

result := evalcheck expression
'result: This is the target to be assigned with the result of the evaluation of the numerical expression. The result can be a shell variable, a Programmer_Guide/Shell_Items or a numerical object
exprerssion
The numerical expression to be evaluated. The expression consists of numerical objects, functions and operators.

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


EVAL subcommands

Examples

For an extensive list of examples, see the script eval_examples.sts: Programmer Guide/Command Reference/EVAL Examples/EVAL Examples

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.

Navigation menu

Personal tools