コード例 #1
0
ファイル: Context.cs プロジェクト: m9ra/KnowledgeDialog2
 internal Context(InferenceEngine mind, WildcardTriplet rootWildcard)
 {
     _mind = mind;
     _rootLevel = getState(null, rootWildcard);
     _levelsToExpand.Enqueue(_rootLevel);
     _levelsToGenerate.Enqueue(_rootLevel);
 }
コード例 #2
0
 internal InferenceLevel(InferenceLevel parent, WildcardTriplet condition, IEnumerable<InferenceStep> steps, Context context)
 {
     Condition = condition;
     Depth = parent == null ? 0 : parent.Depth + 1;
     _context = context;
     _steps = steps.ToArray();
 }
コード例 #3
0
ファイル: Context.cs プロジェクト: m9ra/KnowledgeDialog2
        /// <summary>
        /// Gets (or creates) state for inference of given wildcard.
        /// </summary>
        /// <param name="wildcard">The wildcard to infer.</param>
        /// <returns>The state.</returns>
        private InferenceLevel getState(InferenceLevel parent, WildcardTriplet wildcard)
        {
            InferenceLevel result;
            if (!_wildcardToLevel.TryGetValue(wildcard, out result))
                _wildcardToLevel[wildcard] = result = new InferenceLevel(parent, wildcard, createSteps(wildcard), this);

            return result;
        }
コード例 #4
0
ファイル: Context.cs プロジェクト: m9ra/KnowledgeDialog2
 /// <summary>
 /// Expands given inference level via back chaining.
 /// </summary>
 /// <param name="parent">The parent to be expanded.</param>
 /// <returns>The expansion.</returns>
 private IEnumerable<InferenceLevel> expand(InferenceLevel parent)
 {
     foreach (var requirement in parent.GetRequirements())
     {
         if (!_wildcardToLevel.ContainsKey(requirement))
             yield return getState(parent, requirement);
     }
 }