Informática (2019-20)
Este curso ofrece una introducción a la programación funcional utilizando el lenguaje Haskell, complementada con una sección dedicada al cálculo simbólico con Maxima. Los contenidos están organizados en temas accesibles tanto en formato de texto como en notebooks interactivos de Jupyter. Además, todas las clases están disponibles en una lista de reproducción de YouTube, facilitando el acceso a explicaciones en vídeo. El temario abarca desde los fundamentos de la programación funcional y el uso de tipos, clases y recursión, hasta temas avanzados como la evaluación perezosa, el diseño de algoritmos, estructuras de datos abstractas y aplicaciones prácticas. La parte final del curso incluye contenidos complementarios, como la programación de gráficos y animaciones con Haskell y Gloss, así como una completa introducción al uso de Maxima para el cálculo simbólico.
Esta asignatura forma parte del plan de estudios del primer curso del Grado en Matemáticas de la Universidad de Sevilla.
Temas
Los temas de programación funcional con Haskell se presentan en dos formatos: texto plano y notebooks interactivos de Jupyter. Además, todas las clases están grabadas y disponibles en esta lista de reproducción de YouTube.
- Introducción
- Programación funcional
- Tema 1: Introducción a la programación funcional (en Jupyter).
- Tema 2: Introducción a la programación con Haskell (en Jupyter).
- Tema 3: Tipos y clases (en Jupyter).
- Tema 4: Definición de funciones (en Jupyter).
- Tema 5: Definiciones de listas por comprensión (en Jupyter).
- Tema 6: Funciones recursivas (en Jupyter).
- Tema 7: Funciones de orden superior (en Jupyter).
- Tema 8: Razonamiento sobre programas (en Jupyter).
- Tema 9: Declaraciones de tipos y clases (en Jupyter).
- Tema 10: Evaluación perezosa (en Jupyter).
- Tema 11: Aplicaciones de la programación funcional (en Jupyter)
- Tema 12: Analizadores funcionales (en Jupyter).
- Tema 13: Programas interactivos (en Jupyter).
- Algorítmica
- Tema 14: El TAD de las pilas (en Jupyter).
- Tema 15: El TAD de las colas (en Jupyter).
- Tema 16: El TAD de las colas de prioridad (en Jupyter).
- Tema 17: El TAD de los conjuntos (en Jupyter).
- Tema 18: El TAD de las tablas (en Jupyter).
- Tema 19: El TAD de las árboles binarios de búsqueda (en Jupyter).
- Tema 20: El TAD de los montículos (en Jupyter).
- Tema 21: El TAD de los polinomios (en Jupyter).
- Tema 22: Algoritmos sobre grafos (en Jupyter).
- Tema 23: Técnicas de diseño descendente de algoritmos (en Jupyter)
- Tema 24: Técnicas de diseño ascendente de algoritmos (en Jupyter).
- Complementarios
- Tema 25: Programación de dibujos con Haskell y Gloss.
- Tema 26: Programación de fractales con Haskell y Gloss.
- Tema 27: Programación de animaciones con Haskell y Gloss.
- Tema 28: Análisis de la complejidad de los algoritmos (en Jupyter).
- Tema 29: Las librerías de conjuntos y de diccionarios (en Jupyter).
- Tema 30: Programación dinámica (en Jupyter)
- Cálculo simbólico con Maxima
- Tema CS0: Programación imperativa con Maxima.
- Tema CS1: Introducción a Maxima con wxMaxima y ejercicios.
- Tema CS2: Funciones de una variable y ejercicios.
- Tema CS3: Aritmética y ejercicios.
- Tema CS4: Sucesiones y recursión y ejercicios.
- Tema CS5: Programación y ejercicios.
- Tema CS6: Matrices en Maxima y ejercicios.
- Tema CS7: Gráficos y animaciones.
Libros con temas, ejercicios y exámenes
- En Temas de "Programación funcional" (2019-20) se encuentran las transparencias de la introducción a la programación funcional en forma de libro.
- En Ejercicios de "Informática de 1º de Matemáticas" (2019-20) se encuentran todas las relaciones de ejercicios con sus soluciones.
- En Exámenes de "Programación funcional con Haskell" (2019-20) se encuentran todos los exámenes con sus soluciones.
- En Introducción al cálculo simbólico con Maxima se encuentran una introducción al cálculo simbólico mediante ejercicios con sus soluciones.
Códigos
- En Hackage se encuentran la librería de los tipos abstractos de datos (estudiados desde el tema 14 al 21) con enlaces a sus definiciones y documentación.
- En Resumen de los tipos abstractos de datos se encuentra las especificaciones de los TAD estudiados desde el tema 14 al 21.
- Manual de funciones de los tipos abstractos de datos con ejemplos.
Manuales de referencia de Haskell
- Resumen de funciones de Haskell.
- Manual de funciones básicas de Haskell con ejemplos.
- Manual de la librería de números primos Data.Numbers.Primes.
- Manual de la librería de vectores Data.Vector.
- Manual de la librería de matrices Data.Matrix.
- Manual de la librería de conjuntos Data.Set.
- Manual de la librería de diccionarios Data.Map.
Referencias
Programación funcional con Haskell
Libros programación funcional con Haskell
- R. Bird. Introduction to functional programming using Haskell. (Prentice-Hall, 1998).
- R. Bird Pearls of functional algorithm design. (Cambridge University Press, 2010).
- R. Bird Thinking functionally with Haskell. (Cambridge University Press, 2014).
- H.C. Cunningham. Notes on functional programming with Haskell.
- Hal Daume III et al. Yet another Haskell tutorial.
- A.J.T. Davie. An introduction to functional programming systems using Haskell. (Cambridge University Press, 1992).
- K. Doets y J. van Eijck. The Haskell road to logic, maths and programming.
- J. Fokker. Programación funcional.
- J. Gallardo, P. Gutiérrez y B. Ruiz. Una introducción agradable a Haskell versión 98 (es una traducción de P. Hudak, J. Peterson y J. Fasel A Gentle Introduction to Haskell, Version 98).
- G. Hutton. Programming in Haskell. (Cambridge University Press, 2007).
- M. Lipovača. Learn you a Haskell for great good!
- B. O'Sullivan, J. Goerzen y D. Stewart. Real world Haskell. (O'Reilly Media, Inc., 2008).
- F. Rabhi y G. Lapalme. Algorithms: A functional programming approach.
- The Haskell wikibook.
Manuales de referencia de Haskell
- J. Bailey. Haskell cheat sheet.
- Haskell. Reference card.
- B. Pope y A. van IJzendoorn. A tour of the Haskell prelude.
- A. van IJzendoorn. Tour of the Haskell syntax.
- M. Nic. Haskell reference.
- Prelude.
- Haskell Hierarchical Libraries.
Buscador de funciones de Haskell
Ejercicios de Haskell
Cursos sobre programación funcional con Haskell
- J.A. Alonso. Programación declarativa (2008-09).
- J.E. Gallardo. Programación declarativa - Haskell.
- G. Hutton. Functional programming.
- P. Wadler. Informatics 1 – Functional programming.
Cálculo simbólico
- J.A. Alonso. Resumen de funciones de Maxima.
- J. Arántegui. Introducción a Maxima.
- R. Rodríguez. Maxima con wxMaxima: software libre en el aula de matemáticas.
- M. Rodríguez. Primeros pasos en Maxima.
Sistemas
En esta sección se encuentran enlaces a los sistemas utilizados en la asignatura "Informática" y a los procedimientos de instalación.
Instalación de los sistemas en Windows
Los ficheros para instalar los sistemas en Windows son los siguientes
- La plataforma Haskell: (para 32 bit o 64 bit).
- Emacs.
- Modo Haskell para Emacs
- El sistema de cálculo simbólico Maxima con el entorno wxMaxima.
Instalación de los sistemas en Ubuntu
Se pueden instalar los sistemas en Ubuntu con el gestor de paquetes Synaptic, buscando los paquetes haskell-platform, emacs, haskell-mode, maxima y wxmaxima.
Además, copiar en el directorio del usuario el fichero de configuración de emacs.
Instalación de los sistemas en Mac
Los pasos de la instalación en Mac son los siguientes:
- Instalar MacPorts usando su guía de instalación.
- Instalar aquamacs desde aquí.
- Configurar aquamacs: En la pestaña Options seleccionar Option, Command, Meta keys y después Meta & Spanish .
- Instalar la plataforma Haskell desde aquí.
Sitios de los sistemas
Los sitios oficiales de los sistemas son los siguientes
Sistemas en la Red
- CodeWorld: gráficos y animaciones con Haskell en la Red.
- Repl.it GHCi en el navegador.
- Try Haskell: una sesión con GHCi en el navegador junto con un tutorial de Haskell.
- Haskell Pad: Permite editar, compilar y ejecutar programas Haskell en la Red.