SWI-Prolog 7.4.2 Reference Manual: Section A.13

## A.13 library(gensym): Generate unique identifiers

Gensym (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 `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.

gensym(+Base, -Unique)
  Generate a unique atom from base Base and unify it with Unique. Base should be an atom. The first call will return <base>1 , the next <base>2 , etc. Note that this is no guarantee that the atom is unique in the system.
reset_gensym(+Base)
  Restart generation of identifiers from Base at <Base>1. Used to make sure a program produces the same results on subsequent runs. Use with care.
reset_gensym
  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.