Exemple #1
0
        public void TestBuildingAddFactAction()
        {
            IBuilder <IKnowledgeBaseAction> builder = new AddFactActionBuilder();
            string        addFact       = "'погода - ветренно'";
            AddFactAction addFactAction =
                (AddFactAction)builder.Build(ProductionActionGrammar.AddFact.Parse(addFact)[0]);
            ProductionFact fact = addFactAction.Fact;

            Assert.IsTrue(fact.Name == "погода" && fact.Value == "ветренно");
        }
        /// <summary>
        /// Получает возможные цели вывода. Используется в том случае, если в запросе не указано
        /// значение цели вывода.
        /// </summary>
        /// <param name="statement">Логичесткое утверждение.</param>
        /// <param name="target">Цель вывода.</param>
        /// <returns>Получает возможные цели вывода</returns>
        protected IData GetPossibleTarget(ILogicalStatement statement, IData target)
        {
            ProductionRule rule = statement as ProductionRule;

            if (rule != null)
            {
                foreach (var action in rule.Actions)
                {
                    AddFactAction addFact = action as AddFactAction;
                    if (addFact != null && addFact.Fact.Name == target.Name)
                    {
                        return(addFact.Fact);
                    }
                }
            }
            return(null);
        }
        /// <summary>
        /// Возвращает <c>true</c>, если заданное правило содержит полностю заданную цель.
        /// </summary>
        /// <param name="statement">Логичесткое утверждение.</param>
        /// <param name="target">Цель вывода.</param>
        /// <returns>Возвращает <c>true</c>, если заданное правило содержит полностю заданную цель.</returns>
        protected bool FullyContainsTarget(ILogicalStatement statement, IData target)
        {
            ProductionRule rule = statement as ProductionRule;

            if (rule != null)
            {
                foreach (var action in rule.Actions)
                {
                    AddFactAction addFact = action as AddFactAction;
                    if (addFact != null && addFact.Fact.Name == target.Name &&
                        addFact.Fact.Value == target.Value)
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }