#include #include "pl.h" Query::Query(module_t ctx, predicate_t p, term_t t0) { m_q = PL_open_query(ctx, PL_Q_CATCH_EXCEPTION, p, t0); } Query::~Query() { PL_cut_query(m_q); } int Query::Cut() { if (PL_cut_query(m_q)) return 1; if (term_t t = PL_exception(m_q)) throw t; return 0; } int Query::Close() { if (PL_close_query(m_q)) return 1; if (term_t t = PL_exception(m_q)) throw t; return 0; } int Query::NextSolution() { if (PL_next_solution(m_q)) return 1; if (term_t t = PL_exception(m_q)) throw t; return 0; } int Plx(const char *szMod, const char *szPred) { term_t t = PL_new_term_refs(0); Query q(NULL, PL_predicate(szPred, 0, szMod), t); return q.NextSolution(); }