Saltar al contenido

Evaluación ansiosa/orden aplicativo y evaluación perezosa/orden normal

Es imprescindible interpretar el código de forma correcta previamente a adaptarlo a tu proyecto si ttienes algo que aportar puedes compartirlo con nosotros.

Solución:

La evaluación perezosa evalúa un término como máximo una vez, mientras que el orden normal lo evaluaría cada vez que aparezca. Entonces, por ejemplo, si tienes f(x) = x+x y lo llamas como f(g(42)) entonces g(42) se llama una vez en evaluación perezosa u orden aplicativo, pero dos veces en orden normal.

La evaluación ansiosa y el orden aplicativo son sinónimos, al menos cuando se utiliza la definición de orden aplicativo que se encuentra en Estructura e interpretación de programas informáticos, que parece coincidir con la suya. (Wikipedia define el orden aplicativo de manera un poco diferente y lo tiene como un caso especial de evaluación ansiosa).

También estoy leyendo SICP, y tengo curiosidad por la definición de orden normal dada por los autores. Me pareció bastante similar a la evaluación de Lazy, así que busqué más información sobre ambos.

Sé que esta pregunta se hizo hace mucho tiempo, pero miré las preguntas frecuentes y no encontré ninguna mención de responder preguntas antiguas, así que pensé en dejar lo que encontré aquí para que otras personas puedan usarlo en el futuro.

Esto es lo que he encontrado, y me inclino a estar de acuerdo con ellos:

Yo diría (al igual que otros) que la evaluación perezosa y la Evaluación de orden normal son dos cosas diferentes; la diferencia se menciona anteriormente. En la evaluación perezosa, la evaluación del argumento se difiere hasta que se necesita, momento en el que se evalúa el argumento y se guarda (memoriza) su resultado. Otros usos del argumento en la función utilizan el valor calculado. Los operadores C/C++ ||, &&, y ? : son ambos ejemplos de evaluación perezosa. (A menos que algún programador novato de C/C++ sea lo suficientemente tonto como para sobrecargar && o ||, en cuyo caso las versiones sobrecargadas se evalúan en orden estricto; razón por la cual los operadores && y || NUNCA deben sobrecargarse en C++).

En otras palabras, cada argumento se evalúa como máximo una vez, posiblemente nunca.

NormalOrderE Evaluation, por otro lado, vuelve a evaluar la expresión cada vez que se usa. Piense en las macros de C, CallByName en los lenguajes que lo admiten y la semántica de las estructuras de control de bucle, etc. La evaluación de orden normal puede llevar mucho más tiempo que la evaluación de orden aplicativo y puede causar efectos secundarios más de una vez. (Por eso, por supuesto, las declaraciones con efectos secundarios generalmente no deben proporcionarse como argumentos para las macros en C/C++)

Si el argumento es invariable y no tiene efectos secundarios, la única diferencia entre los dos es el rendimiento. De hecho, en un lenguaje puramente funcional, la evaluación perezosa puede verse como una optimización de la evaluación de orden normal. Con efectos secundarios presentes, o expresiones que pueden devolver un valor diferente cuando se vuelven a evaluar, los dos tienen un comportamiento diferente; La evaluación de orden normal en particular tiene una mala reputación en los lenguajes de procedimiento debido a la dificultad de razonar sobre tales programas sin ReferencialTransparencia

También se debe tener en cuenta que la evaluación de orden estricto (así como la evaluación perezosa) se puede lograr en un lenguaje que admita la evaluación de orden normal a través de memoing explícito. lo contrario no es true; requiere pasar thunks, funciones u objetos a los que se puede llamar/mensajear para diferir/repetir la evaluación.

Y

La evaluación perezosa combina la evaluación y el intercambio de orden normal:

• Nunca evalúes algo hasta que tengas que hacerlo (orden normal)

• Nunca evalúes algo más de una vez (compartir)

http://c2.com/cgi/wiki?LazyEvaluación

http://cs.anu.edu.au/student/comp3610/lectures/Lazy.pdf

Tienes la posibilidad recomendar esta reseña si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *