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)); }
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)); } }