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); }