public _Composite ExtraName(String extra) { _Composite result = new _Composite(this); _ChangeName(extra, result); return(result); }
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); } }
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); }
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); }
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); }
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); } } }
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); }
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); }
public _Composite(_Composite p) : base(p.Name) { Init(p.mComponents); }