Programmer Guide/Command Reference/EVAL: Difference between revisions
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}} < | 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
Contents
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,*]
|
the i-th row of the table | scalar, vector |
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,*]
|
the i-th row of the value item | scalar, vector |
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,*]
|
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)
- their dimensions are the same; and
- 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
- abs
- absmax
- absmin
- absv
- acos
- aseg1
- asin
- asp2osp
- atan
- avr
- cepstrum
- complex arithmetic
- corr
- corrfun
- cos
- cvphase
- dct
- density
- dev
- dft
- dist
- em
- exp
- f0ac
- f0sp
- fft
- fill
- fir1
- floor
- formants
- grand
- haclust
- hcomb
- hist
- hth
- hz2bark
- hz2cent
- hz2erb
- hz2mel
- ifft
- iir1
- imax
- imin
- init
- int
- interp
- inv
- ipeak
- limit
- log
- log2lin
- lpc
- map2map
- mapmind
- max
- median
- min
- modclust
- mul
- ncol
- npow2
- nrow
- optmm
- otrack1
- pgget
- pghull
- pgiline
- pginit
- pgitest
- pgsplit
- pgtrans
- pgxgrid
- pztf
- qdet
- qinterp
- rand
- rleqs
- round
- rpoly
- rpolyreg
- sample
- select
- shuffle
- sig2osp
- sign
- sin
- sinc
- smooth
- sort
- sqrt
- sum
- svd
- tan
- ticks2f1
- trn
- var
- vmcol
- vmrow
- vsubc
- vsubn
- vv
- vvcat
- vvget
- vvset
- wconvert
- window
- wsum
- ydiff
- yint
- zcross
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
.