static Primitives() { Register(AndPrimitive.GetInstance()); //Register(QueryPrimitive.GetInstance()); Register(IfPrimitive.GetInstance()); //Register(TruePrimitive.GetInstance()); //Register(FailPrimitive.GetInstance()); Register(VarPrimitive.GetInstance()); Register(NonVarPrimitive.GetInstance()); Register(AtomPrimitive.GetInstance()); Register(AtomicPrimitive.GetInstance()); Register(IntegerPrimitive.GetInstance()); //Register(ListingPrimitive.GetInstance()); //Register(WritePrimitive.GetInstance()); //Register(NlPrimitive.GetInstance()); //Register(TabPrimitive.GetInstance()); //Register(DisplayPrimitive.GetInstance()); //Register(CutPrimitive.GetInstance()); Register(EqualPrimitive.GetInstance()); //Register(NotEqualPrimitive.GetInstance()); //Register(LessPrimitive.GetInstance()); //Register(PlusPrimitive.GetInstance()); //Register(MinusPrimitive.GetInstance()); //Register(IsPrimitive.GetInstance()); }
private bool IsPredicate(PrologObject fact, StringObject atom) { if (fact.Equals(atom)) { return(true); } if (!(fact is StructureObject)) { return(false); } StructureObject st = ((StructureObject)(fact)); if (st.Functor.Equals(atom)) { return(true); } if (!(st.Functor == IfPrimitive.GetInstance())) { return(false); } fact = st.Parameters[0]; if (fact.Equals(atom)) { return(true); } if (!(fact is StructureObject)) { return(false); } st = (StructureObject)fact; if (st.Functor.Equals(atom)) { return(true); } return(false); }
bool NextFact() { if (mFactsEnum == null) { return(false); } while (mFactsEnum.MoveNext()) { PrologObject fact = (PrologObject)mFactsEnum.Current; SaveStatus(); fact = Machine.AdjustVariables(fact); if (fact is StructureObject && ((StructureObject)(fact)).Functor.Equals(IfPrimitive.GetInstance())) { StructureObject ifpo; ifpo = ((StructureObject)(fact)); PrologObject thenpo = ifpo.Parameters[1]; fact = ifpo.Parameters[0]; if (Machine.Unify(this.Object, fact)) { Machine.Level += 1; Machine.PushPending(thenpo); Machine.PushNode(this); return(true); } } else { if (Machine.Unify(this.Object, fact)) { Machine.PushNode(this); return(true); } } RestoreStatus(); } Machine.PushPending(this); return(false); }