|
int Start_Prolog (int argc, char *argv[]) void Stop_Prolog (void) void Reset_Prolog (void) Bool Try_Execute_Top_Level(void)
int main(int argc, char *argv[])
{
int nb_user_directive;
Bool top_level;
nb_user_directive=Start_Prolog(argc, argv);
top_level=Try_Execute_Top_Level();
Stop_Prolog();
if (top_level)
return 0;
if (nb_user_directive)
return 0;
printf("Warning: no initial goal executed\n"
" use a directive :- initialization(Goal)\n"
" or remove the link option --no-top-level"
" (or --min-bips or --min-size)\n");
return 1;
}
|
parent(bob, mary).
parent(jane, mary).
parent(mary, peter).
parent(paul, peter).
parent(peter, john).
anc(X, Y):-
parent(X, Y).
anc(X, Z) :-
parent(X, Y),
anc(Y, Z).
int main(int argc, char *argv[])
{
int func;
WamWord arg[10];
char str[100];
char *sol[100];
int i,nb_sol=0;
Bool res;
Start_Prolog(argc,argv);
func=Find_Atom("anc");
for(;;)
{
printf("\nEnter a name (or 'end' to finish): ");
scanf("%s",str);
if (strcmp(str, "end")==0)
break;
arg[0]=Mk_Variable();
arg[1]=Mk_String(str);
nb_sol=0;
res=Pl_Query_Start(func, 2, arg, TRUE);
while(res)
{
sol[nb_sol++]=Rd_String(arg[0]);
res=Pl_Query_Next_Solution();
}
Pl_Query_End(PL_RECOVER);
for(i=0;i<nb_sol;i++)
printf(" solution: %s\n", sol[i]);
printf("%d solution(s)\n", nb_sol);
}
Stop_Prolog();
return 0;
}
Enter a name (or 'end' to finish): john solution: peter solution: bob solution: jane solution: mary solution: paul 5 solution(s) Enter a name (or 'end' to finish): mary solution: bob solution: jane 2 solution(s) Enter a name (or 'end' to finish): end