% This LaTeX document was generated using the LaTeX backend of PlDoc, % The SWI-Prolog documentation system \section{library(gensym): Generate unique symbols} \label{sec:gensym} Gensym (\textit{Generate Symbols}) 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 \const{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.\vspace{0.7cm} \begin{description} \predicate{gensym}{2}{+Base, -Unique} Generate $<$\arg{Base}$>$1, $<$\arg{Base}$>$2, etc atoms on each subsequent call. Note that there is nothing that prevents other parts of the application to `invent' the same identifier. The predicate \predref{gensym}{2} is thread-safe in the sense that two threads generating identifiers from the same \arg{Base} will never generate the same identifier. \begin{tags} \tag{See also} \predref{uuid}{1}, \predref{term_hash}{2}, \predref{variant_sha1}{2} may be used to generate various unique or content-based identifiers safely. \end{tags} \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. \predicate{reset_gensym}{1}{+Base} Restart generation of identifiers from \arg{Base} at $<$\arg{Base}$>$1. Used to make sure a program produces the same results on subsequent runs. Use with care. \end{description}