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);
        }
Exemplo n.º 2
0
        /// <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));
        }