programming programacion perezosa lazy funcional funcion evaluacion debugging haskell evaluation

debugging - programacion - lazy programming



Imprimir los pasos de evaluación(reescritura) de Haskell con fines educativos/de aprendizaje. ¿Es posible? (3)

Esta es una característica muy solicitada y muy útil, que, por lo que sé, no está disponible en ningún lugar. :-(

Describo esta pregunta usando un ejemplo de un libro.

En el libro de Simon Thompson "HASKELL el oficio de la programación funcional" en la página 82 (ver imágenes a continuación) se muestran los pasos de evaluación para fac 4 .

PREGUNTA:

¿Es posible usar alguna herramienta o algún "depurador de Haskell" que escriba los pasos de evaluación que usa GHCi cuando evaluaría el valor de fac 4 ?

Preferiblemente en un formato humano legible, con fines educativos y de aprendizaje.

También sería bueno tener una explicación automática para cada paso de evaluación, por ejemplo, qué ecuación se usó en el paso de reescritura.

Mi objetivo principal es obtener una comprensión más profunda de cómo se llevan a cabo los pasos de reescritura cuando ejecuto programas de ejemplo de Haskell educativos simples (como fac ).

Hay alguna forma de hacer esto ? Si es así, ¿cómo?


Hay una herramienta llamada Lambda bubble pop donde puede hacer clic en la expresión para ver cómo se reduce la expresión. Tenga en cuenta que la herramienta solo admite enteros y listas a partir de ahora, pero sin embargo es una buena herramienta educativa.

Instantánea de la herramienta en acción:


Sí y no. Todavía no he visto una herramienta que realice esta evaluación línea por línea que se muestra en su libro de texto, principalmente porque un programa de Haskell no "reescribe" las expresiones.

Sin embargo, hay una herramienta que visualiza la estrategia de evaluación real de Haskell, paso a paso: ghc-vis . En lugar de solo evaluar el resultado y mostrarlo en la consola como lo hace ghci , muestra una representación gráfica del resultado no evaluado, y puede forzar la evaluación del mismo thunk, hasta que llegue a los valores y estructuras primitivos.

Como ejemplo de lo que puede hacer, aquí está la evaluación hasta el tercer miembro de la lista de la secuencia de fibonacci infinita:

Se evalúan 0, 1 y 1, el resto de la lista es un procesador que hace referencia a partes de la lista en sí http://felsin9.de/nnis/ghc-vis/fib1.svg

Fuente: sección de ejemplos del sitio web del proyecto . Deberías echar un vistazo a todos ellos!