Did you know ... | Search Documentation: |
![]() | Atoms and functors |
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.