The terms constructed so far (as EC-words) have been volatile, that is they
do not survive an ECLiPSe execution (due to eg. garbage collection),
It is possible to create safe terms
that have been registered with the ECLiPSe engine and which do
survive execution. The
are provided for this purpose.
EC_refs are vectors of
When you declare an
EC_ref it will contain free variables.
EC_ref X; /* declare one free variable */ EC_refs Tasks(10); /* declare 10 free variables */
EC_refs work like logical variables. When ECLiPSe fails during search
they are reset to old values. They are always guaranteed to refer to
something i.e. they never contain dangling references.
If ECLiPSe backtracks to a point in the execution
older than the point at which the references were created, they
return to being free variables, or take on their initial values.
It is possible to declare references, giving them an initialiser but this must be an atomic type that fits into a single word. That restricts you to atoms, integers and nil.
You can freely assign between an
EC_ref and a
One point to take care of is that assigning such a variable is not like unification since assignment cannot fail. It just overwrites the old value. Assignment is very similar to the setarg/3 built-in in the ECLiPSe language.