next up previous contents index
Next: Calling Prolog from C Up: Calling C from Prolog Previous: Defining Prolog predicates in   Contents   Index

Example

Consider the Prolog predicate:
   :-mode p(+,?).
   p(a,f(1)).
   p(b,[1]).
   p(c,1.2).
The following C function defines the Prolog predicate:
p(){
  TERM a1,a2,a,b,c,f1,l1,f12;
  char *name_ptr;
  
  /*   prepare Prolog terms */
  a1 = ARG(1,2);
  a2 = ARG(2,2);
  a = build_ATOM("a");
  b = build_ATOM("b");
  c = build_ATOM("c");
  f1 = build_STRUCTURE("f",1);  /* f(1) */
  build_ARG(build_INTEGER(1));
  l1 = build_LIST();            /* [1] */ 
  build_ARG(build_INTEGER(1));
  build_ARG(build_NIL());
  f12 = build_FLOAT(1.2);
  
  /* code for the clauses */
  if (!is_ATOM(a1)) return 0;
  name_ptr = get_NAME(a1);
  switch (*name_ptr){
  case 'a': 
    return (unify(a1,a) ? unify(a2,f1) : 0);
  case 'b': 
    return (unify(a1,b) ? unify(a2,l1) : 0);
  case 'c': 
    return (unify(a1,c) ? unify(a2,f12) : 0);
  default: return 0;
  }
}



Neng-Fa Zhou
1999-11-24