internal BinaryOperationExpression(BinaryOperator @operator, SymbolicExpression firstOperand, SymbolicExpression secondOperand) { Operator = @operator; _operands.Item1 = firstOperand ?? throw new ArgumentNullException(nameof(firstOperand)); _operands.Item2 = secondOperand ?? throw new ArgumentNullException(nameof(secondOperand)); }
internal UnaryOperationExpression(UnaryOperator @operator, SymbolicExpression operand) { Operator = @operator; _operand = operand ?? throw new ArgumentNullException(nameof(operand)); }
public static SymbolicExpression Divide(SymbolicExpression a, SymbolicExpression b) => ExpressionSimplifier.TrySimplifyDivision(a, b) ?? new BinaryOperationExpression(BinaryOperator.Division, a, b);
public static SymbolicExpression Multiply(SymbolicExpression a, SymbolicExpression b) => ExpressionSimplifier.TrySimplifyMultiplication(a, b) ?? new BinaryOperationExpression(BinaryOperator.Multiplication, a, b);
public static SymbolicExpression Subtract(SymbolicExpression a, SymbolicExpression b) => ExpressionSimplifier.TrySimplifySubtraction(a, b) ?? new BinaryOperationExpression(BinaryOperator.Subtraction, a, b);
public static SymbolicExpression Add(SymbolicExpression a, SymbolicExpression b) => ExpressionSimplifier.TrySimplifyAddition(a, b) ?? new BinaryOperationExpression(BinaryOperator.Addition, a, b);
public static SymbolicExpression Negate(SymbolicExpression e) => ExpressionSimplifier.TrySimplifyNegation(e) ?? new UnaryOperationExpression(UnaryOperator.Minus, e);