This section discusses the functions used to communicate about 
predicates. Though a Prolog predicate may be defined or not, redefined, 
etc., a Prolog predicate has a handle that is neither destroyed nor 
moved. This handle is known by the type predicate_t.
NULL, the 
current context module is used. If the target predicate does not exist a 
handle to a new undefined predicate is returned. The predicate 
may fail, returning (predicate_t)0 after setting a resource 
exception, if the target module has a limit on the
program_space, see set_module/1. 
Currently aborts the process with a fatal error when out of 
memory. Future versions may raise a resource exception and return (predicate_t)0.NULL, the current 
context module is used. The predicate_t handle may be 
stored as global data and reused for future queries229PL_predicate() 
involves 5 hash lookups (two to get the atoms, one to get the module, 
one to get the functor and the final one to get the predicate associated 
with the functor in the module) as illustrated below.
static predicate_t p = 0;
  ...
  if ( !p )
    p = PL_predicate("is_a", 2, "database");
Note that PL_cleanup() 
invalidates the predicate handle. Foreign libraries that use the above 
mechanism must implement the module
uninstall() function to clear the predicate_t global 
variable.
NULL. Currently always returns TRUE.