示例#1
0
        internal static List <ConceptInstance> FindRelevantConcepts(BeamGenerator generator, HashSet <Concept2> requiredProperties)
        {
            //TODO better matching logic
            var concepts = generator.GetDefinedConcepts();
            var result   = new List <ConceptInstance>();

            foreach (var concept in concepts)
            {
                var conceptInstance   = new ConceptInstance(concept);
                var missingProperties = new HashSet <Concept2>(requiredProperties);

                foreach (var propertyValue in generator.GetPropertyValues(conceptInstance))
                {
                    var property = propertyValue.Key;
                    var value    = propertyValue.Value;

                    missingProperties.Remove(value.Concept);
                }

                if (missingProperties.Count == 0)
                {
                    result.Add(conceptInstance);
                }
            }

            return(result);
        }
        protected override IEnumerable <string> execute(BeamGenerator generator)
        {
            var definedConcepts             = new HashSet <Concept2>(generator.GetDefinedConcepts());
            var conceptWithAssignedProperty = Get <PropertySetEvent>((s) => hasExtraInformation(s, definedConcepts, generator));

            if (conceptWithAssignedProperty == null)
            {
                yield break;
            }

            var target        = conceptWithAssignedProperty.Target;
            var rememberValue = RememberPropertyValue.Create(generator, target, conceptWithAssignedProperty.SubstitutedValue);

            YesNoPrompt.Generate(generator, rememberValue, new ConceptInstance(Concept2.Nothing));
            yield return($"You think that {singular(target.Instance)} has {singular(conceptWithAssignedProperty.SubstitutedValue)} {singular(target.Property)}?");
        }
示例#3
0
        private Dictionary <Concept2, HashSet <Concept2> > getRelevantProperties(ConceptInstance targetInstance, BeamGenerator generator)
        {
            var properties      = new Dictionary <Concept2, HashSet <Concept2> >();
            var definedConcepts = new HashSet <Concept2>(generator.GetDefinedConcepts());

            foreach (var conceptCandidate in definedConcepts)
            {
                var conceptCandidateInstance = new ConceptInstance(conceptCandidate);

                var instanceOf = generator.GetValue(conceptCandidateInstance, Concept2.InstanceOf);
                if (conceptCandidate != targetInstance.Concept && instanceOf?.Concept != targetInstance.Concept)
                {
                    continue;
                }

                var instanceProperties = generator.GetPropertyValues(conceptCandidateInstance);
                foreach (var instanceProperty in instanceProperties)
                {
                    if (!definedConcepts.Contains(instanceProperty.Value.Concept))
                    {
                        continue;
                    }

                    if (!definedConcepts.Contains(instanceProperty.Key))
                    {
                        continue;
                    }

                    if (!properties.TryGetValue(instanceProperty.Key, out var propertyValues))
                    {
                        properties[instanceProperty.Key] = propertyValues = new HashSet <Concept2>();
                    }

                    propertyValues.Add(instanceProperty.Value.Concept);
                }
            }

            return(properties);
        }