public NumberNode Operate(List <NumberNode> constants) { if (constants.Count > 0) { NumberNode result = constants[0]; for (int i = 1; i < constants.Count; i++) { result = Operate(result, constants[i]); } return(result); } throw new Exception("Can not operate on an empty list"); }
private NumberNode Operate(NumberNode lhs, NumberNode rhs) { switch (Operator) { case Operator.Addition: return(new NumberNode(lhs.Value + rhs.Value)); case Operator.Subtraction: return(new NumberNode(lhs.Value - rhs.Value)); case Operator.Multiplication: return(new NumberNode(lhs.Value * rhs.Value)); case Operator.Division: return(new NumberNode(lhs.Value / rhs.Value)); case Operator.Exponentiation: return(new NumberNode(Math.Pow(lhs.Value, rhs.Value))); default: throw new Exception("Can not operate on unrecognized operator"); } }