#include #include #define __GPROLOG_FOREIGN_STRICT__ #include "gprolog.h" int player(char *algorithm, PlTerm *history, char *c, PlTerm *in, PlTerm *out) { PlTerm arg[4]; int func = Pl_Find_Atom(algorithm); printf("player\n"); Pl_Query_Begin(PL_TRUE); arg[0] = *history; arg[1] = Pl_Mk_Variable(); arg[2] = *in; arg[3] = Pl_Mk_Variable(); if (Pl_Query_Call(func, 3, arg)) { printf("read char\n"); move = Pl_Rd_Char_Check(arg[1]); move = Pl_Rd_List_Check(arg[3]); } printf("end\n"); Pl_Query_End(PL_RECOVER); return 0; } int pay(char a, char b) { int payment = -1; PlTerm arg[3]; int func = Pl_Find_Atom("pay"); Pl_Query_Begin(PL_TRUE); arg[0] = Pl_Mk_Char(a); arg[1] = Pl_Mk_Char(b); arg[2] = Pl_Mk_Variable(); if (Pl_Query_Call(func, 3, arg)) { payment = Pl_Rd_Integer(arg[2]); } Pl_Query_End(PL_RECOVER); return payment; } int main(int argc, char *argv[]) { Pl_Start_Prolog(argc, argv); printf("pay: %d\n", pay('d', 'c')); PlTerm history = Pl_Mk_List(NULL); PlTerm in = Pl_Mk_List(NULL); PlTerm out = Pl_Mk_List(NULL); printf("move: %c\n", player("tit4tat", &history, &in, &out)); Pl_Stop_Prolog(); return 0; }