private Expression EvaluateExponent(Evaluatable left, Evaluatable right) { // ln(a ^ b) = b * ln(a) return new DualFactorComponent( Factorizer.ToFactor(right.Evaluate()), Factorizer.ToFactor(new FunctionComponent(Name, new List<Expression> { left.Evaluate() })), true).Evaluate(); }
private Expression EvaluateMultiplication(Evaluatable left, Evaluatable right) { // ln(a * b) = ln(a) + ln(b) return new DualComponentExpression( Componentizer.ToComponent(new FunctionComponent(Name, new List<Expression> { left.Evaluate() }).Evaluate()), Componentizer.ToComponent(new FunctionComponent(Name, new List<Expression> { right.Evaluate() }).Evaluate()), true).Evaluate(); }
private Expression EvaluateDivision(Evaluatable left, Evaluatable right) { // ln(a / b) = ln(a) - ln(b) return new DualComponentExpression( Componentizer.ToComponent(new FunctionComponent(Name, new List<Expression> { left.Evaluate() }).Evaluate()), Componentizer.ToComponent(new FunctionComponent(Name, new List<Expression> { right.Evaluate() }).Evaluate()), false).Evaluate(); }
public Value Evaluate() { return(eval.Evaluate(robot, functionArgs.Select(x => x.Evaluate()).ToArray())); }