The most useful area for exploiting C++ features is type-conversion.
Prolog variables are dynamically typed and all information is passed
around using the C-interface type term_t
. In C++, term_t
is embedded in the lightweight class PlTerm.
Constructors and operator definitions provide flexible operations and
integration with important C-types (char *
, wchar_t*
,
long
and double
).
The list below summarises the classes defined in the C++ interface.
- PlTerm
- Generic Prolog term. Provides constructors and operators for conversion
to native C-data and type-checking.
- PlString
- Subclass of PlTerm with
constructors for building Prolog string objects.
- PlCodeList
- Subclass of PlTerm with
constructors for building Prolog lists of ASCII values.
- PlCharList
- Subclass of PlTerm with
constructors for building Prolog lists of one-character atoms (as atom_chars/2).
- PlCompound
- Subclass of PlTerm with
constructors for building compound terms.
- PlTail
- SubClass of PlTerm for building and
analysing Prolog lists.
- PlTermv
- Vector of Prolog terms. See PL_new_term_refs(). the
[]
operator is overloaded to access elements in this vector. PlTermv
is used to build complex terms and provide argument-lists to Prolog
goals.
- PlException
- Subclass of PlTerm representing a
Prolog exception. Provides methods for the Prolog communication and
mapping to human-readable text representation.
- PlTypeError
- Subclass of PlException for
representing a Prolog
type_error
exception.
- PlDomainError
- Subclass of PlException for
representing a Prolog
domain_error
exception.
- PlExistenceError
- Subclass of PlException for
representing a Prolog
existence_error
exception.
- PlPermissionError
- Subclass of PlException for
representing a Prolog
permission_error
exception.
- PlAtom
- Allow for manipulating atoms in their internal Prolog representation for
fast comparison.
- PlQuery
- Represents opening and enumerating the solutions to a Prolog query.
- PlFrame
- This utility-class can be used to discard unused term-references as well
as to do‘data-backtracking’.
- PlEngine
- This class is used in embedded applications (applications where
the main control is held in C++). It provides creation and destruction
of the Prolog environment.
- PlRegister
- The encapsulation of PL_register_foreign() is defined to be able
to use C++ global constructors for registering foreign predicates.
The required C(++) function header and registration of a predicate is
arranged through a macro called PREDICATE().