public XsbPrologTerm Atom(string name) { var retval = new XsbPrologTerm(xsb.p2p_new()); retval.BindAtom(name); return(retval); }
public IEnumerable <XsbPrologQueryResult> Query(XsbPrologTerm query) { ulong reg1 = xsb.reg_term(1); xsb.p2p_unify(query.term, reg1); return(new XsbPrologQuery(xsb.xsb_query() == 0)); }
public bool Call(XsbPrologTerm goal) { ulong reg1 = xsb.reg_term(1); xsb.p2p_unify(goal.term, reg1); return(xsb.xsb_command() == 0); }
public XsbPrologTerm Nil() { var term = new XsbPrologTerm(xsb.p2p_new()); term.BindNil(); return(term); }
public XsbPrologTerm Float(double value) { var retval = new XsbPrologTerm(xsb.p2p_new()); retval.BindDouble(value); return(retval); }
public XsbPrologTerm Integer(int value) { var retval = new XsbPrologTerm(xsb.p2p_new()); retval.BindInteger(value); return(retval); }
public XsbPrologTerm List(XsbPrologTerm head, XsbPrologTerm tail) { var term = new XsbPrologTerm(xsb.p2p_new()); term.BindList(); term.Head.Unify(head); term.Tail.Unify(tail); return(term); }
internal XsbPrologQueryResult(XsbPrologTerm query, XsbPrologTerm answer) { m_query = query; m_answer = answer; }
public bool Unify(XsbPrologTerm term) { return(xsb.p2p_unify(this.term, term.term) != 0); }
public bool AddPredicate(string name, int arity, Delegate functor) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (arity < 0) { throw new ArgumentOutOfRangeException(nameof(arity)); } if (functor == null) { throw new ArgumentNullException(nameof(functor)); } XsbNativeForeignPredicateCallback d; switch (arity) { case 0: d = new XsbNativeForeignPredicateCallback(() => { xsb.xsb_query_save(0); bool retval = ((XsbPrologCallback0)functor)(); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 1: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); xsb.xsb_query_save(1); bool retval = ((XsbPrologCallback1)functor)(arg1); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 2: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); XsbPrologTerm arg2 = new XsbPrologTerm(xsb.reg_term(2)); xsb.xsb_query_save(2); bool retval = ((XsbPrologCallback2)functor)(arg1, arg2); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 3: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); XsbPrologTerm arg2 = new XsbPrologTerm(xsb.reg_term(2)); XsbPrologTerm arg3 = new XsbPrologTerm(xsb.reg_term(3)); xsb.xsb_query_save(3); bool retval = ((XsbPrologCallback3)functor)(arg1, arg2, arg3); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 4: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); XsbPrologTerm arg2 = new XsbPrologTerm(xsb.reg_term(2)); XsbPrologTerm arg3 = new XsbPrologTerm(xsb.reg_term(3)); XsbPrologTerm arg4 = new XsbPrologTerm(xsb.reg_term(4)); xsb.xsb_query_save(4); bool retval = ((XsbPrologCallback4)functor)(arg1, arg2, arg3, arg4); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 5: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); XsbPrologTerm arg2 = new XsbPrologTerm(xsb.reg_term(2)); XsbPrologTerm arg3 = new XsbPrologTerm(xsb.reg_term(3)); XsbPrologTerm arg4 = new XsbPrologTerm(xsb.reg_term(4)); XsbPrologTerm arg5 = new XsbPrologTerm(xsb.reg_term(5)); xsb.xsb_query_save(5); bool retval = ((XsbPrologCallback5)functor)(arg1, arg2, arg3, arg4, arg5); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 6: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); XsbPrologTerm arg2 = new XsbPrologTerm(xsb.reg_term(2)); XsbPrologTerm arg3 = new XsbPrologTerm(xsb.reg_term(3)); XsbPrologTerm arg4 = new XsbPrologTerm(xsb.reg_term(4)); XsbPrologTerm arg5 = new XsbPrologTerm(xsb.reg_term(5)); XsbPrologTerm arg6 = new XsbPrologTerm(xsb.reg_term(6)); xsb.xsb_query_save(6); bool retval = ((XsbPrologCallback6)functor)(arg1, arg2, arg3, arg4, arg5, arg6); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 7: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); XsbPrologTerm arg2 = new XsbPrologTerm(xsb.reg_term(2)); XsbPrologTerm arg3 = new XsbPrologTerm(xsb.reg_term(3)); XsbPrologTerm arg4 = new XsbPrologTerm(xsb.reg_term(4)); XsbPrologTerm arg5 = new XsbPrologTerm(xsb.reg_term(5)); XsbPrologTerm arg6 = new XsbPrologTerm(xsb.reg_term(6)); XsbPrologTerm arg7 = new XsbPrologTerm(xsb.reg_term(7)); xsb.xsb_query_save(7); bool retval = ((XsbPrologCallback7)functor)(arg1, arg2, arg3, arg4, arg5, arg6, arg7); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; case 8: d = new XsbNativeForeignPredicateCallback(() => { XsbPrologTerm arg1 = new XsbPrologTerm(xsb.reg_term(1)); XsbPrologTerm arg2 = new XsbPrologTerm(xsb.reg_term(2)); XsbPrologTerm arg3 = new XsbPrologTerm(xsb.reg_term(3)); XsbPrologTerm arg4 = new XsbPrologTerm(xsb.reg_term(4)); XsbPrologTerm arg5 = new XsbPrologTerm(xsb.reg_term(5)); XsbPrologTerm arg6 = new XsbPrologTerm(xsb.reg_term(6)); XsbPrologTerm arg7 = new XsbPrologTerm(xsb.reg_term(7)); XsbPrologTerm arg8 = new XsbPrologTerm(xsb.reg_term(8)); xsb.xsb_query_save(8); bool retval = ((XsbPrologCallback8)functor)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); xsb.xsb_query_restore(); return(retval ? 1 : 0); }); break; default: throw new NotImplementedException(); } if (xsb.xsb_add_c_predicate(null, name, arity, d) == 0) { foreignPredicates.Add(d); return(true); } return(false); }