public static Expr Root(this Expr @base, Expr root) => PowerOp.Create(@base, DivideOp.Create(1, root));
public static Expr RaiseToNegativeOne(this Expr expr) => PowerOp.Create(expr, new NegativeOne());
Left.Factor().Concat(Right.Factor()).ToLookup(f => f).Select(g => (b: g.Key, e: g.Count())).Select(pair => pair.e > 1 ? PowerOp.Create(pair.b, pair.e) : pair.b);
public void InvertSubtractOpTest() { var aNb = new Identifier("a") - new Identifier("b"); Assert.AreEqual(aNb.Invert(), PowerOp.Create(aNb, -1)); }
public void InvertAddOpTest() { var aPb = new Identifier("a") + new Identifier("b"); Assert.AreEqual(aPb.Invert(), PowerOp.Create(aPb, -1)); }
public void InvertNegativeValueTest() { var a = -new Identifier("a"); Assert.AreEqual(a.Invert(), PowerOp.Create(a, -1)); }
public void InvertIdenterfierTest() { var a = new Identifier("a"); Assert.AreEqual(a.Invert(), PowerOp.Create(a, -1)); }