I1M2015: Los problemas de las N reinas y de Hamming en Haskell

En la segunda parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos vistos dos aplicaciones de la programación funcional en Haskell: el problema de las reinas (consistente en colocar N reinas en un tablero de dimensiones N por N de forma que no se encuentren más de una en la misma línea: horizontal, vertical o diagonal) y el problema de Hamming (consistente definir una sucesión estrictamente creciente de números tales que el número 1 está en la sucesión y que, si x está en la sucesión, entonces 2x, 3x y 5x también están).

El código del problema de las N reinas es
Read More “I1M2015: Los problemas de las N reinas y de Hamming en Haskell”

I1M2015: Problema del concurso “Cifras y letras” en Haskell

En la primera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas hemos desarrollado un programa en Haskell para resolver los problemas aritméticos del concurso Cifras y letras que consisten en dada una sucesión de números naturales y un número objetivo, intentar construir una expresión cuyo valor es el objetivo combinando los números de la sucesión usando suma, resta, multiplicación, división y paréntesis. Además, cada número de la sucesión puede usarse como máximo una vez y todos los números, incluyendo los resultados intermedios tienen que ser enteros positivos (1,2,3,…).

Por ejemplo, dada la sucesión 1, 3, 7, 10, 25, 50 y el objetivo 765, una solución es (1+50)x(25−10). Para el problema anterior existen 780 soluciones. En cambio, con la sucesión anterior y el objetivo 831, no hay solución.

Se empieza formalizando el problema y definiendo una función para reconcer las soluciones. A continuación, se presentan tres soluciones: la primera por fuerza bruta, la segunda mediante generación y evaluación y la tercera con simplificaciones algebraicas. Se termina con una comparación de las tres soluciones.

El código del programa es
Read More “I1M2015: Problema del concurso “Cifras y letras” en Haskell”

I1M2015: Evaluación perezosa en Haskell

En la segunda 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.

Finalmente, se ha explicado cómo instalar la librería de números primos mediante las siguientes órdenes del sistema

Como aplicación de la librería se han realizado cálculos con los primos de Mersenne.

Las transparencias usadas en la clase son las del tema 10

I1M2015: Declaraciones de clases y de instancias

En la primera parte de la clase de hoy de Informática de 1º del Grado en Matemáticas se ha estudiado las clases en Haskell. Concretamente,

  • cómo definir clases con class,
  • cómo se define la clase Eq,
  • cómo ver en GHCi la información de una clase con :info Eq,
  • cómo definir instancias con instance,
  • cómo se define Bool como instancia de Eq,
  • cómo definir subclases,
  • cómo se define Ord como subclase de Eq,
  • cómo se define Bool como instancia de Ord y
  • cómo definir tipos de datos con clases derivadas.

Las transparencias usadas en la clase son las paginas 35 a 41 del tema 9: