The demo was updated to revision 0.2-alpha. It contains many bugfixes and reliability improvements, especially in the transcendental functions, and a more consistent behavior with regards to the scoping and evaluation of local and global variables.

Variables are now more consistent:

* A variable identifier that is unquoted in a command will look first for a local variable with that name (first in the current secondary, then defined by parent secondaries), and if not found it will look for a global variable (first in the current directory, then in parent directories). The contents of the variable will be evaluated.

* Using LRCL on a variable name will only look for local variables, either from the current secondary or its parents. The contents will not be evaluated.

* Using RCL on a variable name will look for locals first, then global variables, just like unquoted names, except the contents will not be evaluated.

This allows the creation of local variables to "shadow" global variables. For example, a program that is known to write to global variables X and Y, can be "sandboxed" by creating local variables X and Y in a parent secondary that calls the program.
 

* Storing to a local variable with LSTO will check if the variable was defined in the current secondary. If not, it will create a new local variable with the same name that will "shadow" any variable with the same name (either defined locally in a parent secondary, or globally in the current dir or parents), from that point on.

* Storing to a global variable (with STO) will check if the variable is defined in the current directory. If not, it will create a new variable in the current directory.

* Storing to a global variable (with STO) that was "shadowed" by a local variable in a parent secondary will overwrite the value of the local variable in the parent's environment. This is so that the parent secondary can use the value of the variable, as modified by the inner program.

This mode of operation slightly more powerful than the original model in userRPL (where local variables were not visible to child programs unless explicitly defined as "compiled" variables in the child program) since it allows sandboxing, while at the same time remains compatible. The child program doesn't know that is reading/writing to a shadowed variable. Once the parent secondary ends, the variables vanish, leaving the directories clean.

On the other hand, programs that are designed to be encapsulated can use LSTO/LRCL, which will never modify its parents variables, even if they are defined with the same name.

The EVALuation of variables has also been modified. Evaluating a variable name that contains a variable name will leave it on the stack, rather than evaluating it recursively. This allows for "step-by-step" evaluation (doing EVAL repeatedly) and a more consistent manipulation of symbolic expressions in the future.

The only new command introduced with this demo is DOLIST. Other list processing commands are in the works.