\libdoc{gensym}{Generate unique identifiers}

Gensym (\textbf{Gen}erate \textbf{Sym}bols) is an old library for
generating unique symbols (atoms).  Such symbols are generated from
a base atom which gets a sequence number appended.  Of course there
is no guarantee that `catch22' is not an already defined atom and
therefore one must be aware these atoms are only unique in an
isolated context.

The SWI-Prolog gensym library is thread-safe.  The sequence numbers
are global over all threads and therefore generated atoms are unique
over all threads.

\begin{description}
    \predicate{gensym}{2}{+Base, -Unique}
Generate a unique atom from base \arg{Base} and unify it with \arg{Unique}.
\arg{Base} should be an atom. The first call will return \mbox{\bnfmeta{base}1}, 
the next \mbox{\bnfmeta{base}2}, etc. Note that this is no guarantee that the atom
is unique in the system.

    \predicate{reset_gensym}{1}{+Base}
Restart generation of identifiers from \arg{Base} at \bnfmeta{Base}1.  Used to
make sure a program produces the same results on subsequent runs. Use
with care.

    \predicate{reset_gensym}{0}{}
Reset gensym for all registered keys.  This predicate is available for
compatibility only.  New code is strongly advised to avoid the use of
reset_gensym or at least to reset only the keys used by your program
to avoid unexpected side effects on other components.
\end{description}
