The foreign function interface allows Prolog terms to be passed from C functions. Like most of the simple data types that may be passed to and from Prolog, terms to be passed can originate either in Prolog or in C (see fli-p2f-trm). Like terms in Prolog, terms that are passed to C are automatically made safe from damage by operations that might change their absolute position in Prolog memory, like stack shifting and garbage collection.
Prolog: +term C: QP_term_ref
The argument passed from the C function is a QP_term_ref
initialized to a Prolog term. If something other than a term reference
is passed to Prolog, the results are undefined.
Prolog: -term C: QP_term_ref
A QP_term_ref
is passed to the foreign interface. When Prolog returns
a solution, the foreign interface writes a reference to the Prolog
term in the corresponding argument of the call into the QP_term_ref
.
The previous contents of the QP_term_ref
are destroyed. Unlike the
other passing types, there are no associated type errors when passing
terms.
Note that the output term, as well as the input term is represented in
the C code by a QP_term_ref
. This contrasts with other output types,
which are usually represented in C as pointers to the corresponding
input type.