==== 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}}