==== EVAL ====
----
----
Evaluate an object, recursively
----
^ __Input Stack__ ^ ^ __Output Stack__ ^^^
| **O** | **→** | //see list under __Description__// |||
| //Level 1// | //→// | //Level n// | //...// | //Level 1// |
{{page>manual:chapter6:aux:legend&nofooter&noeditbtn&inline}}
|**Type**| [[manual:chapter5:basics#operators|Operator]] ||
|**Parallel list processing**| //Yes, but specific group is determined by the object being evaluated// ||
|**Affected by flags**| [[manual:appendix:flags#flag-70|-70]] | Global autosimplification rules |
|:::| [[manual:appendix:flags#flag-71|-71]] | Application of **Group 1** autosimplification rules |
|:::| [[manual:appendix:flags#flag-72|-72]] | Application of **Group 2** autosimplification rules |
|:::| [[manual:appendix:flags#flag-73|-73]] | Application of **Group 3** autosimplification rules |
|:::| [[manual:appendix:flags#flag-74|-74]] | Application of **Group 4** autosimplification rules |
|:::| [[manual:appendix:flags#flag-75|-75]] | Application of **Group 5** autosimplification rules |
|:::| [[manual:appendix:flags#flag-76|-76]] | Application of **Group 6** autosimplification rules |
|:::| [[manual:appendix:flags#flag-77|-77]] | Application of **Group 7** autosimplification rules |
|:::| [[manual:appendix:flags#flag-78|-78]] | Application of **Group 8** autosimplification rules |
|:::| [[manual:appendix:flags#flag-103|-103]] | Complex results |
----
The ''EVAL'' command evaluates the object on the top level of the stack. Evaluation occurs //recursively//.
The effect of the evaluation and the resulting output depends on the type of object being evaluated, as summarized by the following list.
* **Local Name**: ''EVAL'' //recalls// the content of the variable.
* **Global Name**: ''EVAL'' //calls// the content of a variable:
- a __Name__ is ''EVAL''uated;
- a __Program__ is ''EVAL''uated;
- a __Directory__ becomes the current directory;
- __other objects__ which are not lists are put on the stack.
* **Program**: ''EVAL'' //enters// each object in the program:
- an [[manual:chapter6:dirs:cmd_unquoteid|unquoted]] __Name__ is ''EVAL''uated;
- a __Keyword__ is ''[[manual:chapter6:operators:cmd_ovr_xeq|XEQ]]''ted;
- __other objects__ which are not lists are put on the stack.
* **Symbolic expression**: ''EVAL'' //enters// each object in the expression:
- a __Name__ is ''EVAL''uated;
- a __Keyword__ is ''[[manual:chapter6:operators:cmd_ovr_xeq|XEQ]]''ted;
- __other objects__ which are not lists are put on the stack.
* **Other objects**: if they are not lists ''EVAL'' puts them on the stack.
* **List**: ''EVAL'' //enters// each object in the list:
- __any object__ is ''EVAL''uated according above mentioned rules.
As a final step, ''EVAL'' will perform numerical simplification according to the status of flags from [[manual:appendix:flags#flag-70|-70]] to [[manual:appendix:flags#flag-78|-78]].
----
This command is only partially compatible with userRPL.
In particular:
* In userRPL, if the argument is a list ''EVAL'' //enters// any object in the list, then:
- a __Name__ is ''EVAL''uated;
- a __Program__ is ''EVAL''uated;
- a __Keyword__ is ''[[manual:chapter6:operators:cmd_ovr_xeq|XEQ]]''ted;
- __other objects__ are put on the stack.
while in newRPL, [[manual:chapter5:listproc#parallel-processing-with-lists|parallel list processing]] is performed.
----
If the following commands are executed
2: 6.28
1: 'TWOPI'
……………………………………………………………………………………
STO
2: « TWOPI * »
1: 'CIRCUM'
……………………………………………………………………………………
STO
then the command
2: 2
1: 'CIRCUM'
……………………………………………………………………………………
EVAL
will perform the following steps:
- ''CIRCUM'' (a //global name//) is ''EVAL''uated;
- ''« TWOPI * »'' (a //program//) is ''EVAL''uated;
- ''TWOPI'', the first object (a //global name//) in the program is ''EVAL''uated;
- ''6.28'' (a //real number//) is put on the stack;
- ''[[manual:chapter6:operators:cmd_ovr_mul|*]]'', the second object (a //keyword//) in the program is ''[[manual:chapter6:operators:cmd_ovr_xeq|XEQ]]''ted.
Resulting in
1: 12.56
……………………………………………………………………………………
----
The command
1: { '16' √ }
……………………………………………………………………………………
EVAL
will perform the following steps:
- ''%%'16'%%'' (a //symbolic expression//) is ''EVAL''uated;
- ''16'' (a //real number//) is put on the stack;
- ''[[manual:chapter6:transcendentals:cmd_sqrt|√]]'' (a //keyword//) is ''[[manual:chapter6:operators:cmd_ovr_xeq|XEQ]]''ted.
Resulting in
1: { 4. }
……………………………………………………………………………………
----
{{page>manual:chapter6:operators&nofooter&noeditbtn&inline}}