The following functions provide for communication using atoms and functors.
(atom_t)0.
The following atoms are provided as macros, giving access to the 
empty list symbol and the name of the list constructor. Prior to versionĀ 7,
ATOM_nil is the same as PL_new_atom("[]") 
and
ATOM_dot is the same as PL_new_atom("."). 
This is no longer the case in SWI-Prolog versionĀ 7.
PL_new_functor(ATOM_dot,2). 
It is advised to use
PL_get_list(), PL_put_list() 
or PL_unify_list() 
where applicable.REP_ISO_LATIN_1, REP_UTF8 or REP_MB. 
If
len is (size_t)-1, it is computed from s 
using strlen(). Raises an exception if s violates rep 
and returns (atom_t)0. For other error conditions, see PL_new_atom().REP_UTF8, REP_MB 
or REP_ISO_LATIN_1. Storage is defined by the BUF_* 
flags as described with PL_get_chars(). 
The flag CVT_EXCEPTION defines whether or not the function 
fails silently or raises a Prolog exception. This function may fail 
because atom is not a text atom but a blob (see section 
12.4.9), conversion to the requested encoding is not possible or a 
resource error occurs.term_t 
handle should use PL_atom_nchars(), PL_atom_wchars(), 
or PL_atom_mbchars(). 
If it is
known that atom is a classical Prolog text atom, one 
can use PL_atom_nchars() 
to obtain the C string and its length (for ISO-Latin-1 atoms) or PL_atom_wchars() 
to obtain a C wide string (wchar_t).(atom_t)0.
With the introduction of atom garbage collection in version 3.3.0, atoms no longer live as long as the process. Instead, their lifetime is guaranteed only as long as they are referenced. In the single-threaded version, atom garbage collections are only invoked at the call-port. In the multithreaded version (see chapter 10), they appear asynchronously, except for the invoking thread.
For dealing with atom garbage collection, two additional functions are provided:
Please note that the following two calls are different with respect to atom garbage collection:
PL_unify_atom_chars(t, "text");
PL_unify_atom(t, PL_new_atom("text"));
The latter increments the reference count of the atom text, 
which effectively ensures the atom will never be collected. It is 
advised to use the *_chars() or *_nchars() functions whenever 
applicable.