El tipo abstracto de datos de las colas en Haskell

En este artículo continúo la serie dedicada a los tipos de datos abstractos (TAD) en Haskell presentando el TAD de las colas.

Al igual que hice en los anteriores TAD, usaré módulos, funciones de escritura y QuickCheck para conseguir la abstracción, independencia y certificación de los resultados de las implementaciones.

Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción se realiza por un extremo (el posterior o final) y la operación de extracción por el otro (el anterior o frente). Las colas también se llaman estructuras FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir. Este comportamiento es análogo a las colas del cine.

El contenido del resto del artículo es el siguiente:

  • la signatura del TAD de las colas;
  • las propiedades del TAD de las colas;
  • la implementación, en Haskell, de las colas mediante listas;
  • la implementación, en Haskell, de las colas mediante pares de listas y
  • la comprobación con QuickCheck de sus propiedades.

Read More “El tipo abstracto de datos de las colas en Haskell”

Problema sobre números naturales

El enunciado del problema de Gaussianos de hoy es el siguiente:

Sea n>1 un número natural. Si denotamos como \lfloor k \rfloor a la parte entera del número real k (es decir, el mayor número entero menor o igual que k), demostrar que existe un único natural x < n^2[/latex] tal que [latex] \lfloor n^2/x+1 \rfloor[/latex] es divisible por [latex]n[/latex]. Indicar también el valor de [latex]x[/latex].

El problema ha servido de base para la siguiente relación de ejercicios, para el curso de Informática de 1º del Grado en Matemáticas, en la que se conjetura la respuesta con Haskell y se comprueba con QuickCheck.
Read More "Problema sobre números naturales"

El tipo abstracto de datos de las pilas en Haskell

En este artículo continúo la serie dedicada a los tipos de datos abstractos (TAD) en Haskell presentando el TAD de las pilas.

En artículos anteriores presenté los TAD de los polinomios y el de los conjuntos. En éste voy a presentar el TAD de las pilas y sus implementaciones en Haskell.

Al igual que hice en los anteriores TAD, usaré módulos, funciones de escritura y QuickCheck para conseguir la abstracción, independencia y certificación de los resultados de las implementaciones.

El contenido del resto del artículo es el siguiente: el TAD de las pilas, las implementaciones en Haskell mediante tipos algebraicos y mediante listas y la comprobación con QuickCheck de sus propiedades.
Read More “El tipo abstracto de datos de las pilas en Haskell”

I1M2010: Resolución de problemas de definiciones básicas de Haskell

El objetivo de la de hoy es aprender, resolviendo ejercicios, a definir funciones en Haskell mediante los procedimientos básicos y comprobar sus propiedades con QuickCheck.

En concreto, se han resuelto los ejercicios 4 (iniciales), 5 (prop_iniciales_ultimo), 6.1, 6.2 (cambioEuro), 6.3 (pesetas), 6.4 (euros), 6.5 (prop_EurosPesetas), 6.6, 6.7 y 11.1 (maxI) de la 2ª relación.

Como tarea para la próxima clase se ha propuesto escribir de manera colaborativa las soluciones de los restantes ejercicios de la 2ª relación y los ejercicios de la 3ª relación.

El tipo abstracto de datos de los polinomios en Haskell

Como comenté en la entrada anterior, estoy elaborando los apuntes de los temas del curso Informática del Grado en Matemáticas (2010-11) no incluidos aún en el libro Temas de programación funcional (2010-11).

Uno de los temas en los que he estado trabajando últimamente es en el de los tipos abstractos de datos (TAD). Además de los habituales (pilas, colas, colas de prioridad, conjuntos, tablas, árboles binarios de búsqueda, montículos y árboles AVL), un TAD especialmente adecuado para los estudiantes de matemáticas es el de polinomios. A continuación muestro la implementación que estoy diseñando en Haskell para incluirla en el tema.

Del código deseo resaltar las siguientes características:

  • Independización de los resultados de las implementaciones mediante las funciones de escritura.
  • Comprobación de las implementaciones con QuickCheck mediante las funciones generadoras de polinomios.

A continuación muestro los ficheros con los códigos desarrollados.
Read More “El tipo abstracto de datos de los polinomios en Haskell”