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 <Base>1, <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
gensym/2 is thread-safe 
in the sense that two threads generating identifiers from the same Base 
will never generate the same identifier.
- See also
- 
uuid/1, term_hash/2, variant_sha1/2 
may be used to generate various unique or content-based identifiers 
safely.
 
- 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.
- 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.