AIMA.Core.Logic.FOL.DistributeOrOverAnd.visitConnectedSentence C# (CSharp) Метод

visitConnectedSentence() публичный Метод

public visitConnectedSentence ( ConnectedSentence sentence, Object arg ) : Object
sentence AIMA.Core.Logic.FOL.Parsing.AST.ConnectedSentence
arg Object
Результат Object
        public Object visitConnectedSentence(ConnectedSentence sentence, Object arg)
        {
            // Distribute V over ^:

            // This will cause flattening out of nested ^s and Vs
            Sentence alpha = (Sentence)sentence.getFirst().accept(this, arg);
            Sentence beta = (Sentence)sentence.getSecond().accept(this, arg);

            // (alpha V (beta ^ gamma)) equivalent to
            // ((alpha V beta) ^ (alpha V gamma))
            if (Connectors.isOR(sentence.getConnector())
                    && beta is ConnectedSentence)
            {
                ConnectedSentence betaAndGamma = (ConnectedSentence)beta;
                if (Connectors.isAND(betaAndGamma.getConnector()))
                {
                    beta = betaAndGamma.getFirst();
                    Sentence gamma = betaAndGamma.getSecond();
                    return new ConnectedSentence(Connectors.AND,
                            (Sentence)(new ConnectedSentence(Connectors.OR, alpha,
                                    beta)).accept(this, arg),
                            (Sentence)(new ConnectedSentence(Connectors.OR, alpha,
                                    gamma)).accept(this, arg));
                }
            }

            // ((alpha ^ gamma) V beta) equivalent to
            // ((alpha V beta) ^ (gamma V beta))
            if (Connectors.isOR(sentence.getConnector())
                    && alpha is ConnectedSentence)
            {
                ConnectedSentence alphaAndGamma = (ConnectedSentence)alpha;
                if (Connectors.isAND(alphaAndGamma.getConnector()))
                {
                    alpha = alphaAndGamma.getFirst();
                    Sentence gamma = alphaAndGamma.getSecond();
                    return new ConnectedSentence(Connectors.AND,
                            (Sentence)(new ConnectedSentence(Connectors.OR, alpha,
                                    beta)).accept(this, arg),
                            (Sentence)(new ConnectedSentence(Connectors.OR, gamma,
                                    beta)).accept(this, arg));
                }
            }

            return new ConnectedSentence(sentence.getConnector(), alpha, beta);
        }