I1M2013: Definiciones de tipos de datos en Haskell

En la clase de hoy de Informática de 1º del Grado en Matemáticas se ha estudiado las definiciones de nuevos tipos de datos y de funciones sobre dichos tipos. Concretamente, se ha estudiado

  • cómo definir tipos usando type,
  • cómo definir funciones con dominio o rango en tipos definidos usando type,
  • cómo definir tipos usando data,
  • cómo definir funciones con dominio o rango en tipos definidos usando
  • data y

  • cómo definir tipos de datos recursivos usando como ejemplo los naturales, las listas y los árboles.

Se ha insistido en la metodología de definición de funciones recursivas sobre tipos de datos escribiendo una ecuación por cada uno de los constructores del tipo de dato.

Como caso de estudio se ha iniciado la construcción de un programa para determinar si una fórmula es una tautología. Para ello se ha definido el tipo de dato de las fórmulas proposicionales, el de las interpretaciones y una función para definir el valor de una fórmula respecto de una interpretación. Se ha dejado como ejercicio la definición de las restantes funciones para completar el programa.

El código correspondiente es
Read More “I1M2013: Definiciones de tipos de datos en Haskell”

El triángulo de Floyd en Haskell

El triángulo de Floyd, llamado así en honor a Robert Floyd, es un triángulo rectángulo formado con números naturales. Para crear un triángulo de Floyd, se comienza con un 1 en la esquina superior izquierda, y se continúa escribiendo la secuencia de los números naturales de manera que cada línea contenga un número más que la anterior. Las 5 primeras líneas del triángulo de Floyd son

El triángulo de Floyd tiene varias propiedades matemáticas interesantes:

  • los números de la hipotenusa es la sucesión de los números triangulares; es decir, los números que puede ser representado como puntos dispuestos en forma de triángulo, empezando por el 1. Los primeros números triangulares son

    triangulares
  • los números del cateto de la parte izquierda es la sucesión de los números poligonales centrales; donde el n-ésimo número poligonal centrado es el máximo número de piezas que se pueden obtener a partir de un círculo con n líneas rectas. Los primeros números poligonales centrados son

    poligonales_centrados

En la siguiente relación de ejercicios (elaborada para I1M) se define en Haskell el triágulo de Floyd y se comprueban algunas de sus propiedades.
Read More “El triángulo de Floyd en Haskell”

Números poligonales y sus propiedades en Haskell

Un número poligonal es aquel que puede ser representado como puntos dispuestos en forma de polígono regular, empezando por el 1. Los primeros números poligonales son los números triangulares, estos se forman a partir de triángulos.
triangulares
Los siguientes son los números cuadrangulares
cuadrados
Los siguientes son los números pentagonales
pentagonales

Los números triangulares son 1, 3, 6, 10, 15, 21, … Sus diferencias son 2, 3, 4, 5, 6, … Por tanto, se obtienen como sigue

1 = 1
3 = 1+2
6 = 1+2+3
10 = 1+2+3+4
15 = 1+2+3+4+5
21 = 1+2+3+4+5+6

Los números cuadrangulares son 1, 4, 9, 16, 25, 36, 49, … Sus diferencias son 3, 5, 7, 9, … Por tanto, se obtienen como sigue

1 = 1
4 = 1+3
9 = 1+3+5
16 = 1+3+5+7
25 = 1+3+5+7+9
36 = 1+3+5+7+9+11
49 = 1+3+5+7+9+11+13

Los números pentagonales son 1, 5, 12, 22, 35, … Sus diferencias son 4, 7, 10, 13, … Por tanto, se obtienen como sigue

1 = 1
5 = 1+4
12 = 1+4+7
22 = 1+4+7+10
35 = 1+4+7+10+13

Siguiendo el mismo patrón, las diferencias entre los números hexagonales son 5, 9, 13, 17, … Por tanto, los primeros números hexagonales son

1 = 1
6 = 1+5
15 = 1+5+9
28 = 1+5+9+13
45 = 1+5+9+13+17

Continuando con este patrón se obtienen los número poligonales con k lados. Los siguientes son

k=7 Heptagonal: 1, 7, 18, 34, 55, 81, 112, 148, 189, 235, …
k=8 Octagonal: 1, 8, 21, 40, 65, 96, 133, 176, 225, 280, …
k=9 Nonagonal: 1, 9, 24, 46, 75, 111, 154, 204, 261, 325, …

En la siguiente relación de ejercicios (elaborada para I1M) se muestran distintas definiciones de los números poligonales y algunas de sus propiedades, como el teorema de Fermat, en Haskell.
Read More “Números poligonales y sus propiedades en Haskell”