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