- Documentation
- Reference manual
- Foreign Language Interface
- The Foreign Include File
- Unifying data
- PL_unify()
- PL_unify_atom()
- PL_unify_bool()
- PL_unify_chars()
- PL_unify_atom_chars()
- PL_unify_list_chars()
- PL_unify_string_chars()
- PL_unify_integer()
- PL_unify_int64()
- PL_unify_uint64()
- PL_unify_float()
- PL_unify_pointer()
- PL_unify_functor()
- PL_unify_compound()
- PL_unify_list()
- PL_unify_nil()
- PL_unify_arg()
- PL_unify_term()
- PL_chars_to_term()
- PL_wchars_to_term()
- PL_quote()
 
 
- Unifying data
 
- The Foreign Include File
 
- Foreign Language Interface
- Packages
 
- Reference manual
TRUE on success.
Care is needed if PL_unify() 
returns FAIL and the foreign function does not immediately 
return to Prolog with FAIL. Unification may perform 
multiple changes to either t1 or t2. A failing 
unification may have created bindings before failure is detected. Already 
created bindings are not undone. For example, calling PL_unify() 
on a(X, a) and a(c,b) binds
X to c and fails when trying to unify a 
to
b. If control remains in C or even if we want to return 
success to Prolog, we must undo such bindings. This is achieved 
using
PL_open_foreign_frame() 
and PL_rewind_foreign_frame(), 
as shown in the snippet below.
    { fid_t fid = PL_open_foreign_frame();
      ...
      if ( !PL_unify(t1, t2) )
        PL_rewind_foreign_frame(fid);
      ...
      PL_close_foreign_frame(fid);
    }
In addition, PL_unify() 
may have failed on an exception, typically a resource (stack) 
overflow. This can be tested using
PL_exception(), 
passing 0 (zero) for the query-id argument. Foreign functions that 
encounter an exception must return FAIL to Prolog as soon 
as possible or call PL_clear_exception() 
if they wish to ignore the exception.