Example #1
0
        public static List <Metaquery> VariableExpand(Metaquery query)
        {
            List <Metaquery> mqList = new List <Metaquery>();

            Metaquery newMQ;
            //mqList.AddRange(AddVariable(query.Head, newMQ));

            //Check the possibility of adding variable to Head Relation
            int maxVariablesInRelation = 5;

            if (query.Head.Arity < maxVariablesInRelation)
            {
                newMQ = query.Clone();
                newMQ.Head.AddVariable(query.Head.Arity + 1);
                mqList.Add(newMQ);
            }
            //List<int> relationsVarCount = ProcessMQDetails.RelationsVarCount;
            //foreach (Relation bodyRelation in query.Body.List)
            for (int i = 0; i < query.Body.Count; i++)
            {
                Relation bodyRelation = query.Body[i];
                if (bodyRelation.Arity < maxVariablesInRelation) //relationsVarCount[i])
                {
                    newMQ = query.Clone();
                    newMQ.Body[i].AddVariable(bodyRelation.Arity + 1);
                    mqList.Add(newMQ);
                }
                //mqList.AddRange(AddVariable(bodyRelation, newMQ));
            }
            return(mqList);
        }