public static List <List <Assignment> > Distinct(List <List <Assignment> > solutions) { List <List <Assignment> > distinctSols = new List <List <Assignment> >(); foreach (List <Assignment> sol in solutions) { if (!distinctSols.Any(s => BottomUpFOLEvaluator.CompareSolutions(s, sol))) { distinctSols.Add(sol); } } return(distinctSols); }
public static List <List <Assignment> > Search(string body, string query, bool topDownSearch) { List <string> subwords = getAllSubwords(body); string folExpression = query.Substring(query.IndexOf(":=") + 2); string freeVarsString = query.Substring(query.IndexOf('(') + 1).Substring(0, query.IndexOf(')') - 2); string[] freeVars = freeVarsString.Split(','); ParseTreeFOL_Q parsedExpression = FOLParser.Parse(folExpression, body); List <List <Assignment> > res; if (topDownSearch) { res = TopDownFOLEvaluator.evaluateParsedExpression(parsedExpression, subwords.ToArray(), freeVars, body); } else { res = BottomUpFOLEvaluator.EvaluateParsedExpression(parsedExpression, subwords.ToArray(), freeVars, body); } return(res); }