Esempio n. 1
0
        public static IEnumerable <KeyValuePair <object, object> > logic_All
            (IEnumerable <Goal> g, Dictionary <object, object> substitutions)
        {
            List <Goal> goals = g.ToList();

            if (goals.Count() == 1)
            {
                var goal = goals[0];
                if (goal.Unify(substitutions))
                {
                    return(substitutions);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                var values = new Dictionary <object, object>();
                foreach (KeyValuePair <object, object> pair in substitutions)
                {
                    values.Add(pair.Key, pair.Value);
                }

                foreach (Goal goal in goals)
                {
                    var clonedDict = LogicSharp.CloneDictionaryCloningValues(substitutions);
                    if (goal.Unify(clonedDict))
                    {
                        IEnumerable <KeyValuePair <object, object> > lst = LogicSharp.DiffTwoDictionary(clonedDict, substitutions);
                        foreach (var pair in lst)
                        {
                            if (!values.ContainsKey(pair.Key))
                            {
                                values.Add(pair.Key, pair.Value);
                            }
                            else
                            {
                                return(null);
                            }
                        }
                    }
                    else
                    {
                        return(null);
                    }
                }
                return(values);
            }
        }