:-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; } }