示例#1
0
        public static VarTerm CreateVar(bool negated, string functor)
        {
            VarTerm v = new VarTerm(functor);

            v.SetNegated(negated);
            return(v);
        }
示例#2
0
 public override bool HasVar(VarTerm t, Unifier u)
 {
     if (base.HasVar(t, u))
     {
         return(true);
     }
     return(body.HasVar(t, u));
 }
示例#3
0
        public static VarTerm ParseVar(string sVar)
        {
            as2j    parser = new as2j(new StringReader(sVar));
            VarTerm v      = parser.Var(Literal.DefaultNS);

            if (parser.getNextToken().kind != as2jConstants.EOF)
            {
                throw new ParseException("Expected <EOF> after " + v + " for parameter '" + sVar + "'");
            }
            return(v);
        }
示例#4
0
        public override Literal MakeVarsAnnon(Unifier u)
        {
            base.MakeVarsAnnon(u);
            VarTerm v = u.Deref(cyclicVar);

            if (v != null)
            {
                cyclicVar = v;
            }
            return(this);
        }
示例#5
0
        public override bool HasVar(VarTerm t, Unifier u)
        {
            int size = GetArity();

            for (int i = 0; i < size; i++)
            {
                if (GetTerm(i).HasVar(t, u))
                {
                    return(true);
                }
            }
            return(false);
        }
示例#6
0
        public override bool Equals(object t)
        {
            if (t == null)
            {
                return(false);
            }
            if (t == this)
            {
                return(true);
            }

            if (t.GetType() == typeof(VarTerm))
            {
                VarTerm tAsVT = t as VarTerm; //This should be const but c# doesn't allow it
                return(GetFunctor().Equals(tAsVT.GetFunctor()));
            }
            return(false);
        }
示例#7
0
文件: Pred.cs 项目: nasa03/Jasonity
 public override bool HasVar(VarTerm t, Unifier u)
 {
     if (base.HasVar(t, u))
     {
         return(true);
     }
     if (annotations != null)
     {
         foreach (ITerm v in annotations)
         {
             if (v.HasVar(t, u))
             {
                 return(true);
             }
         }
     }
     return(false);
 }
示例#8
0
        public VarTerm VarToReplace(ITerm t, Unifier u)
        {
            VarTerm v     = (VarTerm)t;
            VarTerm deref = u.Deref(v);

            if (deref.Equals(v))
            {
                Atom a = v.GetNS();
                if (a.IsVar())
                {
                    a = VarToReplace(a, u);
                }
                //UnnamedVar uv = useShortUnnamedVars ? new UnnamedVar(a) : UnnamedVar.Create(a, t.ToString());
                UnnamedVar uv = UnnamedVar.Create(a, t.ToString());
                if (deref.HasAnnot())
                {
                    uv.SetAnnots(deref.GetAnnots().CloneLT());
                    uv.MakeVarsAnnon(u);
                }
                u.Bind(deref, v);
                return(v);
            }
            else
            {
                Atom a = v.GetNS();
                if (a.IsVar())
                {
                    a = VarToReplace(a, u);
                }
                deref = (VarTerm)deref.CloneNS(a);
                if (v.HasAnnot() && !deref.HasAnnot())
                {
                    deref.SetAnnots(v.GetAnnots().CloneLT());
                    deref.MakeVarsAnnon(u);
                }
                return(deref);
            }
        }
示例#9
0
 public override bool HasVar(VarTerm t, Unifier u)
 {
     if (Equals(t))
     {
         return(true);
     }
     if (u != null)
     {
         ITerm vl = u.Get(this);
         if (vl != null)
         {
             try
             {
                 u.Remove(this);
                 return(vl.HasVar(t, u));
             }
             finally
             {
                 u.Bind(this, vl);
             }
         }
     }
     return(false);
 }
示例#10
0
 public void SetTail(VarTerm v)
 {
 }
示例#11
0
        /****** Checks *******/

        /*
         * Returns true only if this term contains the variable t (or unifies with the variable term t?).
         * t - The variable term
         * u - The unifier
         */
        public virtual bool HasVar(VarTerm t, Unifier u)
        {
            return(false);
        }
示例#12
0
 public CyclicTerm(Literal t, VarTerm v, Unifier u) : base(t, u)
 {
     cyclicVar = v;
 }
示例#13
0
 public CyclicTerm(Literal t, VarTerm v) : base(t)
 {
     cyclicVar = v;
 }
示例#14
0
文件: Pred.cs 项目: nasa03/Jasonity
        public override bool HasSubsetAnnot(Literal p, Unifier u)
        {
            if (annotations == null)
            {
                return(true);
            }
            if (!p.HasAnnot())
            {
                return(false);
            }
            ITerm               thisTail    = null;
            IListTerm           pAnnots     = p.GetAnnots().CloneLTShallow();
            VarTerm             pTail       = pAnnots.GetTail();
            ITerm               pAnnot      = null;
            IListTerm           pAnnotsTail = null;
            IEnumerator <ITerm> en          = pAnnots.ListTermIterator();
            bool enReset = false;

            IEnumerator <IListTerm> en2 = annotations.ListTermIterator(); // use this iterator to get the tail of the list

            while (en2.MoveNext())
            {
                IListTerm lt    = en2.Current;
                ITerm     annot = lt.GetTerm();
                if (annot == null)
                {
                    break;
                }
                if (lt.IsTail())
                {
                    thisTail = lt.GetTail();
                }
                if (annotations.IsVar() && !enReset)
                {
                    enReset = true;
                    en      = pAnnots.ListTermIterator();
                    pAnnot  = null;
                }
                bool ok = false;
                while (true)
                {
                    if (pAnnot != null && u.UnifiesNoUndo(annotations, pAnnot))
                    {
                        ok = true;
                        en.Dispose();
                        pAnnot = en.Current;
                        break;
                    }
                    else if (pAnnot != null && pAnnot.CompareTo(annot) > 0)
                    {
                        break;
                    }
                    else if (en.MoveNext())
                    {
                        pAnnot = en.Current;
                    }
                    else
                    {
                        break;
                    }
                }
                if (!ok && pTail != null)
                {
                    if (pAnnotsTail == null)
                    {
                        pAnnotsTail = (IListTerm)u.Get(pTail);
                        if (pAnnotsTail == null)
                        {
                            pAnnotsTail = new ListTermImpl();
                            u.Unifies(pTail, pAnnotsTail);
                            pAnnotsTail = (IListTerm)u.Get(pTail);
                        }
                    }
                    pAnnotsTail.Add((ITerm)annot.Clone()); // Como uso el Clone de C# lo que clono son object que luego hay que castear...
                    ok = true;
                }
                if (!ok)
                {
                    return(false);
                }
            }
            if (thisTail != null)
            {
                u.Unifies(thisTail, pAnnots);
            }
            return(true);
        }
示例#15
0
 public override bool HasVar(VarTerm t, Unifier u)
 {
     throw new NotImplementedException();
 }