PeH: Codificación por longitud en Haskell

La codificación por longitud, o comprensión RLE (del inglés, “Run-length encoding”), es una compresión de datos en la que secuencias de datos con el mismo valor consecutivas son almacenadas como un único valor más su recuento. Por ejemplo, la cadena

se codifica por

Interpretado esto como 12 letras B, 1 letra N , 12 letras B, 3 letras N, etc.

En los siguientes ejercicios se definirán funciones para codificar y descodificar por longitud y comprobar que son operaciones inversas.
Read More “PeH: Codificación por longitud en Haskell”

PeH: Sucesión de Fibonacci, evaluación perezosa y números construibles

Continuando con ejemplos de evaluación perezosa en Haskell, un clásico es la sucsión de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … cuyos dos primeros términos son 0 y 1 y los restantes se calcula sumando los dos anteriores.

En la siguiente relación de ejercicios se presentan distintas definiciones de la sucesión de Fibonacci basadas en la evaluación perezosa y la última
usando números construibles mediante la librería Data.Real.Constructible.
Read More “PeH: Sucesión de Fibonacci, evaluación perezosa y números construibles”

RA2013: Deducción natural en lógica proposicional con Isabelle/HOL (2)

En la clase de hoy del curso de Razonamiento automático se ha continuado el estudio de la deducción natural en lógica proposicional con Isabelle/HOL. La presentación se basa en los ejemplos de tema 2 del curso LI (Lógica informática), que a su vez se basa en el libro de de Huth y Ryan Logic in Computer Science. La página al lado de cada ejemplo indica la página de las transparencias de LI donde se encuentra la demostración.

Para cada ejemplo se presentan distintas demostraciones. La primera intenta reflejar la demostración de la transparencia, las siguientes van eliminando detalles de la prueba hasta la última que es automática.

A los largos de los ejemplos se van comentando los elementos del lenguaje conforme van entrando en el juego.

La teoría con los ejemplos presentados en la clase es la siguiente:
Read More “RA2013: Deducción natural en lógica proposicional con Isabelle/HOL (2)”

PeH: El triángulo de Pascal en Haskell

El triángulo de Pascal es un triángulo de números

construido de la siguiente forma

  • la primera fila está formada por el número 1;
  • las filas siguientes se construyen sumando los números adyacentes de la fila superior y añadiendo un 1 al principio y al final de la fila.

La construcción del triángulo de Pascal sirve para ilustrar cómo se puede trabajar con listas infinitas en Haskell usando la evaluación perezosa como se muestra en los siguientes ejercicios.
Read More “PeH: El triángulo de Pascal en Haskell”