示例#1
0
 public void processNode()
 {
     if (propositionType.GetType() == typeof(AndClass))
     {
         sw.WriteLine($"{currentNode}[label = \"^\"]");
         sw.WriteLine($"{currentNode} -- {currentNode * 2}");
         sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}");
         //create children and set parent for the children
         List <IProposition> children = propositionType.getChildProposition();
         GraphNode           left     = new GraphNode(currentNode * 2, this, children[1], sw);
         GraphNode           right    = new GraphNode(currentNode * 2 + 1, this, children[0], sw);
     }
     else if (propositionType.GetType() == typeof(OrClass))
     {
         sw.WriteLine($"{currentNode}[label = \"||\"]");
         sw.WriteLine($"{currentNode} -- {currentNode * 2}");
         sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}");
         //create children and set parent for the children
         List <IProposition> children = propositionType.getChildProposition();
         GraphNode           left     = new GraphNode(currentNode * 2, this, children[1], sw);
         GraphNode           right    = new GraphNode(currentNode * 2 + 1, this, children[0], sw);
     }
     else if (propositionType.GetType() == typeof(ImplicationClass))
     {
         sw.WriteLine($"{currentNode}[label = \"=>\"]");
         sw.WriteLine($"{currentNode} -- {currentNode * 2}");
         sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}");
         //create children and set parent for the children
         List <IProposition> children = propositionType.getChildProposition();
         GraphNode           left     = new GraphNode(currentNode * 2, this, children[1], sw);
         GraphNode           right    = new GraphNode(currentNode * 2 + 1, this, children[0], sw);
     }
     else if (propositionType.GetType() == typeof(BiImplicationClass))
     {
         sw.WriteLine($"{currentNode}[label = \"<=>\"]");
         sw.WriteLine($"{currentNode} -- {currentNode * 2}");
         sw.WriteLine($"{currentNode} -- {currentNode * 2 + 1}");
         //create children and set parent for the children
         List <IProposition> children = propositionType.getChildProposition();
         GraphNode           left     = new GraphNode(currentNode * 2, this, children[1], sw);
         GraphNode           right    = new GraphNode(currentNode * 2 + 1, this, children[0], sw);
     }
     else if (propositionType.GetType() == typeof(NotClass))
     {
         sw.WriteLine($"{currentNode}[label = \"~\"]");
         sw.WriteLine($"{currentNode} -- {currentNode * 2}");
         //create children and set parent for the children
         List <IProposition> children = propositionType.getChildProposition();
         GraphNode           left     = new GraphNode(currentNode * 2, this, children[0], sw);
     }
     else
     {
         sw.WriteLine($"{currentNode}[label = \"{propositionType.GetString()}\"]");
     }
 }
        public bool isSplitOrNot()
        {
            IProposition        propositionOfNotClass  = toBeProcessedProposition.getChildProposition()[0];
            List <IProposition> childPropositionsOfNot = propositionOfNotClass.getChildProposition();

            if (toBeProcessedProposition is NotClass)
            {
                if (propositionOfNotClass is ImplicationClass || propositionOfNotClass is OrClass)
                {
                    if (propositionOfNotClass is ImplicationClass)
                    {
                        leftProducts.Add(childPropositionsOfNot[0]);
                        rightProducts.Add(new NotClass(childPropositionsOfNot[1]));
                    }
                    else
                    {
                        leftProducts.Add(new NotClass(childPropositionsOfNot[0]));
                        rightProducts.Add(new NotClass(childPropositionsOfNot[1]));
                    }
                    ruleOfNode = Rule.Alpha;
                    return(false);
                }
                else if (propositionOfNotClass is NotClass)
                {
                    ruleOfNode = Rule.Alpha;
                    leftProducts.Add(childPropositionsOfNot[0]);
                    return(false);
                }
                else if (propositionOfNotClass is FinalVar)
                {
                    return(false);
                }
                else //andClass
                {
                    ruleOfNode = Rule.Beta;
                    leftProducts.Add(new NotClass(childPropositionsOfNot[0]));
                    rightProducts.Add(new NotClass(childPropositionsOfNot[1]));
                    return(true);
                }
            }
            else
            {
                if (toBeProcessedProposition is AndClass)
                {
                    ruleOfNode = Rule.Alpha;
                    leftProducts.Add(childPropositionsOfNot[0]);
                    rightProducts.Add(childPropositionsOfNot[1]);
                    return(false);
                }
                else if (propositionOfNotClass is FinalVar)
                {
                    return(false);
                }
                else //Orclass
                {
                    ruleOfNode = Rule.Beta;
                    leftProducts.Add(childPropositionsOfNot[0]);
                    rightProducts.Add(childPropositionsOfNot[1]);
                    return(true);
                }
            }
        }