Beispiel #1
0
 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());
 }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }