示例#1
0
        public _Composite ExtraName(String extra)
        {
            _Composite result = new _Composite(this);

            _ChangeName(extra, result);
            return(result);
        }
示例#2
0
        public override Boolean CompareTo(_Term p)
        {
            if (p.GetType() != _TypeOfTerm.COMPOSITE)
            {
                return(false);
            }

            if (Name != p.Name)
            {
                return(false);
            }

            _Composite temp = (_Composite)p;

            if (mComponents.Count != temp.mComponents.Count)
            {
                return(false);
            }

            for (int i = 0; i < mComponents.Count; ++i)
            {
                _Term temp1 = (_Term)mComponents[i];
                _Term temp2 = (_Term)temp.mComponents[i];
                if (temp1.CompareTo(temp2) == false)
                {
                    return(false);
                }
            }

            return(true);
        }
        private Boolean Run(_Term x, _Term y, ref _MGU s)
        {
            if (x.CompareTo(y))
            {
                return(true);
            }
            else
            if (x.GetType() == _TypeOfTerm.VARIABLE)
            {
                return(Unify_var((_Variable)x, y, ref s));
            }
            else
            if (y.GetType() == _TypeOfTerm.VARIABLE)
            {
                return(Unify_var((_Variable)y, x, ref s));
            }
            else
            if (x.GetType() == _TypeOfTerm.COMPOSITE && y.GetType() == _TypeOfTerm.COMPOSITE)
            {
                if (x.Name != y.Name)
                {
                    return(false);
                }

                _Composite comX = (_Composite)x;
                _Composite comY = (_Composite)y;

                if (comX.Count != comY.Count)             // Khong cung toan tu
                {
                    return(false);
                }

                for (int i = 0; i < comX.Count; ++i)
                {
                    _Term tempArrX = comX[i].Replace(s);
                    _Term tempArrY = comY[i].Replace(s);

                    if (Run(tempArrX, tempArrY, ref s) == false)
                    {
                        return(false);
                    }
                }

                return(true);
            }
            else             // x hoac y la hang
            {
                return(false);
            }
        }
示例#4
0
        private ArrayList _GetListOfVariable2(_Composite p)
        {
            ArrayList result = new ArrayList();

            for (int i = 0; i < p.mComponents.Count; ++i)
            {
                _Term temp = (_Term)p.mComponents[i];
                if (temp.GetType() == _TypeOfTerm.VARIABLE)
                {
                    Boolean flag = false;
                    for (int j = 0; j < result.Count; ++j)
                    {
                        _Term te = (_Term)result[j];
                        if (temp.CompareTo(te))
                        {
                            flag = true;
                            break;
                        }
                    }
                    if (flag == false)
                    {
                        result.Add(temp);
                    }
                }
                else
                if (temp.GetType() == _TypeOfTerm.COMPOSITE)
                {
                    ArrayList t = _GetListOfVariable2((_Composite)temp);
                    for (int j1 = 0; j1 < t.Count; ++j1)
                    {
                        Boolean flag  = false;
                        _Term   temp1 = (_Term)t[j1];
                        for (int j = 0; j < result.Count; ++j)
                        {
                            _Term te = (_Term)result[j];
                            if (temp1.CompareTo(te))
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (flag == false)
                        {
                            result.Add(temp1);
                        }
                    }
                }
            }
            return(result);
        }
示例#5
0
        public override _Term Replace(_MGU s)
        {
            _Term     result = null;
            ArrayList temp   = new ArrayList();

            for (int i = 0; i < mComponents.Count; ++i)
            {
                temp.Add(this[i].Replace(s));
            }

            result = new _Composite(Name, temp);

            return(result);
        }
示例#6
0
        public String GetResult()
        {
            String    result       = "";
            Boolean   flag         = false;
            ArrayList ListVariable = new ArrayList();

            // Cau truy van co chua bien
            if (mG.GetType() == _TypeOfTerm.COMPOSITE)
            {
                _Composite temp = (_Composite)mG;
                ListVariable = temp.GetListOfVariable();
                if (temp.CountVariable > 0)
                {
                    flag = true;
                }
            }
            else
            if (mG.GetType() == _TypeOfTerm.VARIABLE)
            {
                flag = true;
                ListVariable.Add(mG);
            }

            if (flag == true)
            {
                if (mResult.Count == 0) // khong co dap an
                {
                    result += "False";
                }
                else
                {
                    for (int i = 0; i < mResult.Count; ++i)
                    {
                        _MGU temp = (_MGU)mResult[i];
                        for (int j = 0; j < temp.Count; ++j)
                        {
                            result += temp[j].ToString() + ", ";
                        }
                        result += "\n";
                    }
                    result = result.Replace(", \n", "\n");
                    result = result.Substring(0, result.Length - 1);
                }
            }
            else
            {
                result += (mResult.Count > 0);
            }
            return(result);
        }
示例#7
0
 private void _ChangeName(String extra, _Composite p)
 {
     for (int i = 0; i < p.mComponents.Count; ++i)
     {
         _Term temp = (_Term)p.mComponents[i];
         if (temp.GetType() == _TypeOfTerm.VARIABLE)
         {
             p.mComponents[i] = new _Variable(extra + temp.Name);
         }
         else
         if (temp.GetType() == _TypeOfTerm.COMPOSITE)
         {
             _ChangeName(extra, (_Composite)temp);
         }
     }
 }
示例#8
0
        private int _CountVariable(_Composite p)
        {
            int count = 0;

            for (int i = 0; i < p.mComponents.Count; ++i)
            {
                _Term temp = (_Term)p.mComponents[i];
                if (temp.GetType() == _TypeOfTerm.VARIABLE)
                {
                    count++;
                }
                else
                if (temp.GetType() == _TypeOfTerm.COMPOSITE)
                {
                    count += _CountVariable((_Composite)temp);
                }
            }
            return(count);
        }
示例#9
0
        private ArrayList _GetListOfVariable(_Composite p)
        {
            ArrayList result = new ArrayList();

            for (int i = 0; i < p.mComponents.Count; ++i)
            {
                _Term temp = (_Term)p.mComponents[i];
                if (temp.GetType() == _TypeOfTerm.VARIABLE)
                {
                    result.Add(temp);
                }
                else
                if (temp.GetType() == _TypeOfTerm.COMPOSITE)
                {
                    ArrayList t = _GetListOfVariable((_Composite)temp);
                    for (int j = 0; j < t.Count; ++j)
                    {
                        result.Add(t[j]);
                    }
                }
            }
            return(result);
        }
示例#10
0
 public _Composite(_Composite p)
     : base(p.Name)
 {
     Init(p.mComponents);
 }