Ejemplo n.º 1
0
        public override SimplifyResult Replace(out Node node)
        {
            if (Children.Count == 0)
            {
                node = new NumberNode(Number.One);
                return(new SimplifyResult(true));
            }

            node = Children[0];
            for (int i = 1; i < Children.Count; i++)
            {
                if (Sign[i])
                {
                    node = new MultiNode(Children[i], node);
                }
                else
                {
                    node = new DivideNode(node, Children[i]);
                }
            }
            return(new SimplifyResult(true));
        }
Ejemplo n.º 2
0
        public override SimplifyResult Replace(out Node node)
        {
            if (typeof(NumberNode).IsInstanceOfType(RChild) ||
                ((NumberNode)RChild).Value.M == 1)
            {
                NumberNode n = (NumberNode)RChild;

                if (n.Value.N == 0)
                {
                    node = new NumberNode(Number.One);
                    return(new SimplifyResult(true));
                }
                else
                {
                    MultiNode result = new MultiNode();
                    long      x      = Math.Abs(n.Value.N);
                    for (long i = 0; i < x; i++)
                    {
                        result.Children.Add(LChild);
                    }

                    if (n.Value.N < 0)
                    {
                        node = new DivideNode(new NumberNode(Number.One), result);
                    }
                    else
                    {
                        node = result;
                    }
                    return(new SimplifyResult(true, true));
                }
            }
            else
            {
                node = null;
                return(new SimplifyResult(false));
            }
        }