In development and runtime systems alike, Prolog and C code may call each other to arbitrary depths.
Before calling a predicate from C you must look up the
predicate definition by module, name, and arity. The
SP_predicate() will return a pointer to this definition
NULL if the predicate is not visible in the
module. This definition could be used in more than one call to
the same predicate. The module specification is optional.
"" (the empty string) is given, then the
default type-in module (see Module Spec) is assumed:
SP_pred_ref SP_predicate(char *name_string, long arity, char *module_string)
Note that the first and third arguments point to encoded strings, representing the characters of the predicate and module name.
SP_pred() may be used as an alternative to the
above. The only difference is that the name and module
arguments are passed as Prolog atoms rather than strings,
and the module argument is mandatory. This saves the cost
of looking up the two arguments in the Prolog symbol table. This
cost dominates the cost of
SP_pred_ref SP_pred(SP_atom name_atom, long arity, SP_atom module_atom)