Axiom.Compiler.Framework.BinaryTree.Flatten C# (CSharp) Метод

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

public Flatten ( BinaryTree t, ArrayList &args ) : void
t BinaryTree
args System.Collections.ArrayList
Результат void
        public void Flatten(BinaryTree t, ref ArrayList args)
        {
            if (t.Name == ",")
            {
                args.Add(t.Left);
                if (t.Right.Name == ",")
                {
                    Flatten(t.Right, ref args);
                }
                else
                {
                    args.Add(t.Right);
                }
            }
            else
            {
                args.Add(t);
            }
        }

Usage Example

        private PrologCodeTerm ConvertGoalBinaryTreeToCodeDOM(BinaryTree goal)
        {
            if (goal.Name == ".")
            {
                return(ConvertBinaryListToCodeDOM(goal));
            }
            else if (Char.IsUpper(goal.Name[0]))  // Goal is a variable
            {
                return(new PrologCodeVariable(goal.Name));
            }
            else
            {
                PrologCodePredicate goalPredicate = new PrologCodePredicate(goal.Name);
                ArrayList           gargs         = new ArrayList();
                goal.Flatten(goal, ref gargs);
                goalPredicate.IsMethod   = IsMethod(goal.Name, gargs.Count);
                goalPredicate.MethodInfo = GetMethodInfo(goal.Name);

                if (goal.Arguments != null && goal.Arguments.Count != 0)
                {
                    // Example:
                    // goal(X,a).
                    ArrayList arguments = new ArrayList();
                    goal.Flatten((BinaryTree)goal.Arguments[0], ref arguments);
                    foreach (BinaryTree a in arguments)
                    {
                        goalPredicate.Arguments.Add(ConvertGoalVariableBinaryTreeToCodeDOM(a));
                    }
                    return(goalPredicate);
                }
                else
                {
                    // X = a (goal is '=')
                    if (goal.Left != null && goal.Right != null)
                    {
                        goalPredicate.Arguments.Add(ConvertGoalVariableBinaryTreeToCodeDOM(goal.Left));
                        goalPredicate.Arguments.Add(ConvertGoalVariableBinaryTreeToCodeDOM(goal.Right));
                        return(goalPredicate);
                    }
                    // [] + foo.
                    if (goal.Left == null && goal.Right != null)
                    {
                        goalPredicate.Arguments.Add(ConvertGoalVariableBinaryTreeToCodeDOM(goal.Right));
                        return(goalPredicate);
                    }
                    // X + []
                    if (goal.Left != null && goal.Right == null)
                    {
                        goalPredicate.Arguments.Add(ConvertGoalVariableBinaryTreeToCodeDOM(goal.Left));
                        return(goalPredicate);
                    }
                    if (goal.Left == null && goal.Right == null)
                    {
                        return(goalPredicate);
                    }
                }
            }
            return(null);
        }
All Usage Examples Of Axiom.Compiler.Framework.BinaryTree::Flatten