- 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
Availability:C-language interface function
./2). If successful, 
write a reference to the head of the list into h and a 
reference to the tail of the list into t. This reference may 
be used for subsequent calls to this function. Suppose we want to return 
a list of atoms from a char **. We could use the example 
described by
PL_put_list(), 
followed by a call to PL_unify(), 
or we can use the code below. If the predicate argument is unbound, the 
difference is minimal (the code based on PL_put_list() 
is probably slightly faster). If the argument is bound, the code below 
may fail before reaching the end of the word list, but even if the 
unification succeeds, this code avoids a duplicate (garbage) list and a 
deep unification.
foreign_t
pl_get_environ(term_t env)
{ term_t l = PL_copy_term_ref(env);
  term_t a = PL_new_term_ref();
  extern char **environ;
  char **e;
  for(e = environ; *e; e++)
  { if ( !PL_unify_list(l, a, l) ||
         !PL_unify_atom_chars(a, *e) )
      PL_fail;
  }
  return PL_unify_nil(l);
}