public void Solve() { bool moreRules = true; RulesBase usableRules = new RulesBase(); usableRules.Rules = new List <Rule>(rDB.Rules); fDB.Clear(); while (moreRules) { Tuple <Rule, int> ruleToApply = FindUsableRule(usableRules); if (ruleToApply != null) { IFact newFact = ruleToApply.Item1.Conclusion; newFact.Level = ruleToApply.Item2 + 1; fDB.AddFact(newFact); usableRules.Remove(ruleToApply.Item1); } else { moreRules = false; } } ihm.PrintFacts(fDB.Facts); }
public void Solve() { // On fait une copie des règle existantes // + création d'une base de faits vierge bool moreRules = true; RulesBase usableRules = new RulesBase(); usableRules.Rules = new List <Rule>(rDB.Rules); fDB.Clear(); // Tant qu'il existe des règles à appliquer while (moreRules) { // Cherche une règle à appeler Tuple <Rule, int> t = FindUsableRule(usableRules); if (t != null) { // Applique la règle et ajoute le nouveau fait // à la base IFact newFact = t.Item1.Conclusion; newFact.SetLevel(t.Item2 + 1); fDB.AddFact(newFact); // Enlève la règle des règles applicables usableRules.Remove(t.Item1); } else { // PLus de règles possible : on s'arrête moreRules = false; } } // Ecriture du résultat ihm.PrintFacts(fDB.Facts); }