UnifyArraysFast() статический приватный Метод

static private UnifyArraysFast ( object a1, object a2, PrologContext context ) : IEnumerable
a1 object
a2 object
context PrologContext
Результат IEnumerable
        internal override IEnumerable <CutState> Prove(object[] args, PrologContext context, ushort parentFrame)
        {
            object[] goal1Args = null;
            var      newVars   = new LogicVariable[FreeVariables.Count];

            object[] newArgs = Term.AlphaConvertArglist(HeadArgs, FreeVariables, newVars, context, true);
            // ReSharper disable UnusedVariable
#pragma warning disable 414, 168, 219
            foreach (bool ignore in Term.UnifyArraysFast(args, newArgs, context))
#pragma warning restore 414, 168, 219
            {
                if (goal1Args == null)
                {
                    goal1Args = Term.AlphaConvertArglist(BodyGoals[0].Arguments, FreeVariables, newVars, context, false);
                }

#pragma warning disable 414, 168, 219
                foreach (CutState ignoreFreeze in context.ProveAllWokenGoals())
#pragma warning restore 414, 168, 219
                {
                    // ReSharper restore UnusedVariable
                    foreach (CutState state1 in context.KnowledgeBase.Prove(BodyGoals[0].Functor, goal1Args, context, parentFrame))
                    {
                        yield return(state1);
                    }
                }
            }
        }
        internal override IEnumerable <CutState> Prove(object[] args, PrologContext context, ushort parentFrame)
        {
            object[] goal1Args = null;
            object[] goal2Args = null;
            object[] goal3Args = null;
            object[] goal4Args = null;
            object[] goal5Args = null;
            object[] goal6Args = null;
            object[] goal7Args = null;
            object[] goal8Args = null;

            var newVars = new LogicVariable[FreeVariables.Count];

            object[] newArgs = Term.AlphaConvertArglist(HeadArgs, FreeVariables, newVars, context, true);
// ReSharper disable UnusedVariable
            foreach (bool ignore in Term.UnifyArraysFast(args, newArgs, context))
            {
                if (goal1Args == null)
                {
                    goal1Args = Term.AlphaConvertArglist(BodyGoals[0].Arguments, FreeVariables, newVars, context, false);
                }

                foreach (CutState ignoreFreeze in context.ProveAllWokenGoals())
                {
                    // ReSharper restore UnusedVariable
                    foreach (CutState state1 in context.KnowledgeBase.Prove(BodyGoals[0].Functor, goal1Args, context, parentFrame))
                    {
                        if (state1 == CutState.ForceFail)
                        {
                            yield return(CutState.ForceFail);
                        }
                        if (goal2Args == null)
                        {
                            goal2Args = Term.AlphaConvertArglist(BodyGoals[1].Arguments, FreeVariables, newVars, context, false);
                        }

                        foreach (CutState state2 in context.KnowledgeBase.Prove(BodyGoals[1].Functor, goal2Args, context, parentFrame))
                        {
                            if (state2 == CutState.ForceFail)
                            {
                                yield return(CutState.ForceFail);
                            }
                            if (goal3Args == null)
                            {
                                goal3Args = Term.AlphaConvertArglist(BodyGoals[2].Arguments, FreeVariables, newVars, context, false);
                            }

                            foreach (CutState state3 in context.KnowledgeBase.Prove(BodyGoals[2].Functor, goal3Args, context, parentFrame))
                            {
                                if (state3 == CutState.ForceFail)
                                {
                                    yield return(CutState.ForceFail);
                                }
                                if (goal4Args == null)
                                {
                                    goal4Args = Term.AlphaConvertArglist(BodyGoals[3].Arguments, FreeVariables, newVars, context, false);
                                }

                                foreach (CutState state4 in context.KnowledgeBase.Prove(BodyGoals[3].Functor, goal4Args, context, parentFrame))
                                {
                                    if (state4 == CutState.ForceFail)
                                    {
                                        yield return(CutState.ForceFail);
                                    }
                                    if (goal5Args == null)
                                    {
                                        goal5Args = Term.AlphaConvertArglist(BodyGoals[4].Arguments, FreeVariables, newVars, context, false);
                                    }

                                    foreach (CutState state5 in context.KnowledgeBase.Prove(BodyGoals[4].Functor, goal5Args, context, parentFrame))
                                    {
                                        if (state5 == CutState.ForceFail)
                                        {
                                            yield return(CutState.ForceFail);
                                        }
                                        if (goal6Args == null)
                                        {
                                            goal6Args = Term.AlphaConvertArglist(BodyGoals[5].Arguments, FreeVariables, newVars, context, false);
                                        }

                                        foreach (CutState state6 in context.KnowledgeBase.Prove(BodyGoals[5].Functor, goal6Args, context, parentFrame))
                                        {
                                            if (state6 == CutState.ForceFail)
                                            {
                                                yield return(CutState.ForceFail);
                                            }
                                            if (goal7Args == null)
                                            {
                                                goal7Args = Term.AlphaConvertArglist(BodyGoals[6].Arguments, FreeVariables, newVars, context, false);
                                            }

                                            foreach (CutState state7 in context.KnowledgeBase.Prove(BodyGoals[6].Functor, goal7Args, context, parentFrame))
                                            {
                                                if (state7 == CutState.ForceFail)
                                                {
                                                    yield return(CutState.ForceFail);
                                                }
                                                if (goal8Args == null)
                                                {
                                                    goal8Args = Term.AlphaConvertArglist(BodyGoals[7].Arguments, FreeVariables, newVars, context, false);
                                                }

                                                foreach (CutState state8 in context.KnowledgeBase.Prove(BodyGoals[7].Functor, goal8Args, context, parentFrame))
                                                {
                                                    yield return(state8);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }