Next: Backtrackable destructive update, Up: Unique modes [Contents]
In addition to the insts mentioned above
(free, ground, and bound(…)),
Mercury also provides “unique” insts
unique and unique(…)
which are like ground and bound(…) respectively,
except that they carry the additional constraint that
there can only be one reference to the corresponding value.
There is also an inst dead which means that
there are no references to the corresponding value,
so the compiler is free to generate code that reuses that value.
There are three standard modes for manipulating unique values:
% unique output :- mode uo == free >> unique. % unique input :- mode ui == unique >> unique. % destructive input :- mode di == unique >> dead.
Mode uo is used to create a unique value.
Mode ui is used to inspect a unique value without losing its uniqueness.
Mode di is used to deallocate or reuse the memory
occupied by a value that will not be used.
Note that a value is not considered unique
if it might be needed on backtracking.
This means that unique modes are generally only useful
for code whose determinism is det or cc_multi
(see Determinism).
Unlike bound instantiatedness trees,
there is no alternative syntax for unique instantiatedness trees.