He estado trabajando con árboles de expresiones durante unos días y tengo curiosidad por saber qué hace Expression.Reduce(). El msdn documentation no es muy útil, ya que solo indica que "reduce" la expresión. Por si acaso, intenté con un ejemplo (ver a continuación) para comprobar si este método incluía la reducción matemática, pero este no parece ser el caso.¿Qué hace Expression.Reduce()?
¿Alguien sabe lo que hace este método y es posible proporcionar un ejemplo rápido que lo muestra en acción? ¿Algún buen recurso por ahí?
static void Main(string[] args)
{
Expression<Func<double, double>> func = x => (x + x + x) + Math.Exp(x + x + x);
Console.WriteLine(func);
Expression r_func = func.Reduce();
Console.WriteLine(r_func); // This prints out the same as Console.WriteLine(func)
}
Su ejemplo probablemente sea defectuoso. Marque 'CanReduce' para ver si la llamada de reducción realmente hará algo. –
Claro, devuelve falso. Mi pregunta, en otras palabras, sería: ¿Cuándo regresa Expression.CanReduce verdadero? –
Cuando la expresión se puede reducir a una "más simple". Mi suposición de "más simple" se basaría en la representación interna: una expresión "más simple" es aquella que tiene una representación interna más pequeña y/o más rápida. –