public Fact Запросить(Variable g, ExpertSystem es) { frmQuestion fq = new frmQuestion(g, es); fq.ShowDialog(); Fact f = new Fact(g, es.res as string, Rightly.Yes); return(f); }
/// <summary> /// Устанавливает значение переменной на основании имеющихся правил /// </summary> /// <param name="g">Переменная</param> private Fact Consult(Variable g) { if (g.Domain == null) { throw new DomainException("У переменной \"" + g.Name + "\" неизвестен домен!"); } if (g.Domain.ListVal.Count == 0) { throw new DomainException("Домен \"" + g.Domain.Name + "\" не имеет значений!"); } if (g.MyType == VarType.Queried) { // запрашиваемая frmQuestion fq = new frmQuestion(g, this); fq.ShowDialog(); Fact f = new Fact(g, res as string, Rightly.Yes); return(f); } else { foreach (string s in rules.Keys) // если выводимая { if (rules[s].Result != null && rules[s].Result.V.CompareTo(g) == 0) { switch (DoRule(rules[s])) { case Rightly.Unknown: if (g.MyType == VarType.DeductionQueried) // выводимо-запрашиваемая { frmQuestion fq = new frmQuestion(g, this); fq.ShowDialog(); Fact f = new Fact(g, res as string, Rightly.Yes); return(f); } continue; default: return(rules[s].Result); } } } } return(new Fact(g, g.Domain.GetVal(0), Rightly.Unknown)); }