I1M2016: Uso de las librerías HLint y Trace

En la segunda parte de la clase de hoy de Informática de 1º del Grado en Matemáticas se ha ecplicado el uso de las libretías HLint y Trace.

La librería HLint se instala ejecutando en una consola

Para explicar el uso de HLint se considera el programa ej1.hs en el que está definida la suma de una lista de números y cuyo contenido es

para analizarlo, se ejecuta en una consola

Siguiendo la sugerencia, cambiamos el contenido del programa ej1.hs y queda

Lo volvemos a analizar con HLint

Con lo que finalmente el programa queda

y al analizarlo

El segundo ejemplo que se explicó es en un programa con acumulador. El programa está en el fichero ej2.hs cuyo contenido es

Lo analizamos con HLint

Al incorporar las 2 sugerencias a ej2.hs el programa queda como sigue

Lo volvemos a analizar con HLint

a incorporar la sugerencia a ej2.hs cuyo contenido queda como sigue

Lo vovemos a analizar con HLint

Aunque no ha dado ninguna sugerencia, podemos eliminar la dunción auxiliar aux quedando el contenido de ej2.hs como sigue

Lo analizamos con HLint

Con lo que el program final se reduce a

Para explicar la librería Trace volvemos a considerar la 2ª definición de la suma de los elemntos de una lista; es decir, la versión inicial del ej2.hs

Para usar la librería Trace hauy que importarla añadiendo al principio del fichero la línea

Como la función recursiva es aux, para seguir su traza le añadimos como primera ecuación la siguiente.

Con estos cambios, el contenido del fichero es

Al evaluarlo

se observa la traza. La cadena de la traza se puede construir con la función printf de la librería Printf como se muestra a continuación

en donde se ha ajustado el ancho de la la columna del acumulador a 2 (mediante %2d) como se ve en la evaluación

I1M2016: Evaluación perezosa en Haskell

En la primera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas se ha estudiado la evaluación perezosa en Haskell. Se han visto la estrategias de evaluación perezosa e impaciente, se han comparado respecto de la terminación y el número de pasos necesarios en las computaciones, se ha aplicado a la computación con estructuras infinitas y se han visto casos en los que se aumenta la eficiencia con evaluación estricta.

Como ejemplo, se ha estudiado el cálculo de los números primos mediante la criba de Erastótenes.

Los apuntes correspondientes a la clase son

RA2016: Razonamiento sobre árboles y bosques en Isabelle/HOL

En la primera parte de la clase de hoy del curso de Razonamiento automático se ha estudiado cómo definir y razonar en Isabelle/HOL tipos de datos recursivos como árboles binarios, árboles generales y bosques. En su definición se usa recursión cruzada y en la demostración de sus propiedades se usa inducción doble.

La teoría utilizada es la siguiente
Read More “RA2016: Razonamiento sobre árboles y bosques en Isabelle/HOL”