Like most programming languages, GEL has two different types of variables: local and global. A local variable only exists in the context of the function where it is set and all functions called from inside this function. A global variable exists in all contexts. When you set a variable on the toplevel command line, outside of any function, then it will be a global. All functions will see it.
When you set a variable inside a function, it will only be seen
inside the function, including all function calls that are made
inside this function. This is where GEL differs from a language
such as C. One could describe local variables as being semi global
in this sense. For example the following code will print out 5.
but the function g
cannot be called on the
top level as a
will not be defined.
function f() = (a:=5; g()); function g() = print(a); f();
Suppose you assign a value to an identifier inside a function, and this identifier is also used for a global variable, or a variable set in a calling function. Then this has the effect of creating a new local variable inside the function. For example the following code will print out 6 and not 5.
a=6; function f() = (a:=5); print(a);
Sometimes however it is neccessary to set
a global variable from inside a function. For this, use the
set
function. Passing a string or a quoted identifier to
this function sets the variable globally. For example, to set
a
to the value 3 you could call:
set(`a,3)or:
set("a",3)
The set
function always sets the toplevel
global. There is no way to set a local variable in some function
from a subroutine. For this you must use passing by reference.