public void Run(_Term goal) { mVariable = new ArrayList(); mResult = new ArrayList(); _MGU theta = new _MGU(); ArrayList _goals = new ArrayList(); // Tien xu ly if (goal.GetType() == _TypeOfTerm.COMPOSITE) { mG = new _Composite((_Composite)goal).ExtraName("?"); } else if (goal.GetType() == _TypeOfTerm.VARIABLE) { mG = new _Variable("?" + goal.Name); } else { mG = new _Constant(goal); } _goals.Add(mG); Run(_goals, theta); }
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 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); } } }
public override Boolean IsAppear(_Term p) { Boolean flag = false; if (p.GetType() == _TypeOfTerm.COMPOSITE) { return(false); } for (int i = 0; i < mComponents.Count; ++i) { _Term temp = (_Term)mComponents[i]; if (temp.GetType() == _TypeOfTerm.COMPOSITE) { flag = temp.IsAppear(p); } else { flag = temp.CompareTo(p); } if (flag == true) { return(true); } } return(false); }
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); }
public _Horn(_Horn p) { mLeft = new ArrayList(); for (int i = 0; i < p.mLeft.Count; ++i) { _Term e = (_Term)p.mLeft[i]; mLeft.Add(_Term.arrPatternObject[(int)e.GetType()].NewObject(e)); } mRight = _Term.arrPatternObject[(int)p.mRight.GetType()].NewObject(p.mRight); }
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); }
public ArrayList GetArguments() { ArrayList result = new ArrayList(); for (int i = 0; i < mComponents.Count; ++i) { _Term p = (_Term)mComponents[i]; result.Add(_Term.arrPatternObject[(int)p.GetType()].NewObject(p)); } return(result); }
public override Boolean CompareTo(_Term p) { if (p.GetType() != _TypeOfTerm.VARIABLE) { return(false); } if (Name != p.Name) { return(false); } return(true); }
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); }
private void Init(ArrayList Components) { if (Components == null) { mComponents = null; } else { mComponents = new ArrayList(); for (int i = 0; i < Components.Count; ++i) { _Term p = (_Term)Components[i]; mComponents.Add(_Term.arrPatternObject[(int)p.GetType()].NewObject(p)); } } }
private void Init(_Term x, _Term y) { mArg1 = _Term.arrPatternObject[(int)x.GetType()].NewObject(x); mArg2 = _Term.arrPatternObject[(int)y.GetType()].NewObject(y); }
private void Init(_Variable var, _Term x) { mArg1 = new _Variable(var); mArg2 = _Term.arrPatternObject[(int)x.GetType()].NewObject(x); }