Example #1
0
 private static List <List <Assignment> > EvaluateLogicalExpression(ParseTreeFOL_O expression, string[] subwords, string body)
 {
     if (expression.getTerm() != null)
     {
         Term     term     = expression.getTerm();
         string[] freeVars = FOLSearcher.GetFreeVars(term);
         return(TopDownFOLEvaluator.evaluateParsedExpression(term, subwords, freeVars, body));
     }
     else
     {
         List <List <Assignment> > leftTable  = EvaluateLogicalExpression(expression.getLeftChild(), subwords, body);
         List <List <Assignment> > rightTable = EvaluateLogicalExpression(expression.getRightChild(), subwords, body);
         rightTable = FillInSolutions(rightTable, leftTable, subwords);
         leftTable  = FillInSolutions(leftTable, rightTable, subwords);
         if (expression.getFolOperator() == FOLOperator.Disjunction)
         {
             leftTable.AddRange(rightTable.Where(r => !leftTable.Any(l => CompareSolutions(l, r))));
         }
         else
         {
             leftTable.RemoveAll(l => !rightTable.Any(r => CompareSolutions(l, r)));
         }
         return(leftTable);
     }
 }
Example #2
0
        static List <List <Assignment> > FillInSolutions(List <List <Assignment> > left, List <List <Assignment> > right, string[] subwords)
        {
            string[] leftVars  = FOLSearcher.GetFreeVars(left);
            string[] rightVars = FOLSearcher.GetFreeVars(right);

            string[] newLeftVars = rightVars.Where(r => !leftVars.Any(l => r == l)).ToArray();

            return(FillInSolutions(left, newLeftVars, subwords));
        }