Docencia: Programación Declarativa 2015-16

Modificado el 7 de Septiembre de 2017

¡¡¡¡ Importante !!!! : Elm se ha actualizado a la versión 0.17, que es esencialmente distinta a la 0.16 en la que se ha dado el curso.

Cosas tan profundas como que ya no existe el concepto de señal en el nuevo Elm (lo que se hacía con señales ahora se puede hacer con Suscripciones) o que no está disponible la librería Graphics en el core, sino que hay que cargarla de forma adicional (lo que significa que ya no funcionará en el editor online, pero sí siguen funcionando en instalaciones y compilaciones locales).

Pero no todo está perdido, por suerte la versión 0.16 sigue existiendo, con el editor web incluido, y podéis encontrarlo aquí: http://elm-lang.org:1234. Tened en cuenta que los enlaces de Elm normales llevan directamente a la versión nueva, no a la usada en las clases. 


El material que se muestra en esta página (y que está formado principalmente a partir de diversas entradas sobre Programación Funcional que puedes encontrar en este sitio) se corresponde con el material adicional que está planificado para la asignatura de Programación Declarativa que se imparte en el grado de Tecnologías Informáticas de la E.T.S. Ingeniería Informática de la Universidad de Sevilla.

Objetivos

Junto al contenido base de la asignatura, que se centra principalmente en los fundamentos del lenguaje de programación Haskell, el material adicional tiene como objetivo complementar esa línea argumental con un punto de vista más flexible, ya sea profundizando en algunas de las técnicas que promueve la programación funcional (como la programación reactiva o la programación concurrente), o mostrando otras alternativas a Haskell sin salirnos del paradigma de la programación funcional.

Debe tenerse en cuenta que, precisamente por los objetivos de flexbilidad que se persiguen, lo que puedes encontrar aquí es solo un esbozo del contenido adicional propuesto, pero que podrá ser modificado (en su forma, pero nunca en su fondo) durante la ejecución del curso con el fin de acondicionarlo a las necesidades y prioridades de los participantes.

Ficha Técnica

Grado: Tecnologías Informáticas

Aula: I2.33

Horario: Martes (19:40 - 21:30) y Viernes (17:40 - 19:30)

Lugar Tutorías: Despacho H1.48

Horario Tutorias: Por determinar

Sistema de Implementación: Haskell, Elm

Profesor: Luis ValenciaFernando Sancho Caparrini

Contenido Base

Por una parte, el material en común que tiene este curso con el resto de cursos similares que se dan en la Universidad es, esencialmente, el aprendizaje del lenguaje de programación Haskell, como referente de la Programación Funcional. La guía de referencia que usaremos es el libro ¡Aprende Haskell por el bien de todos! (que es la versión española de Learn You a Haskell for Great Good!, un magnífico libro con una versión abierta y completamente pública en la web). A continuación mostramos parte del contenido que usaremos en las clases y que resume el contenido de la asignatura normal y del libro anterior (se enlaza cada tema con el correspondiente capítulo del libro, así como con dos ficheros de texto, uno que resume brevemente los puntos principales del tema, y otro con ejercicios propuestos a modos de práctica):

  1. Introducción a la programación con Haskell: funciones básicas, operadores, listas, listas por comprensión, tuplas. (Resumen y Práctica)
  2. Tipos y clases. (Resumen y Práctica)
  3. Sintaxis de funciones. (Resumen y Práctica)
  4. Funciones recursivas. (Resumen y Práctica)
  5. Funciones de orden superior. (Resumen y Práctica)
  6. Declaraciones de tipos y clases. (ResumenPráctica 1 y Práctica 2)

Además, aquí puedes encontrar una recopilación (con ejemplos) de las funciones básicas de Haskell, realizada por el profesor José Antonio Alonso.

Contenido Complementario

Por otra parte, el contenido complementario que se propone cubre algunos temas teóricos en los que se profundiza en las características más importantes de la programación funcional, y se usa Elm como segundo lenguaje funcional, esta vez orientado a la generación de contenido web siguiendo el paradigma de la Programación Reactiva:

  1. Programación Funcional: Una mirada diferente.
  2. Haskell: el Lenguaje Funcional.
  3. Refactorización Funcional.
  4. Semántica denotacional para la recusión.
  5. Elm: Haskell + FRP + Web.
    1. Introducción. (Ejercicios)
      1. Sintáxis Básica.
      2. Definiendo Tipos para Modelar.
    2. Elementos Visuales. (Ejercicios)
    3. Programación Funcional Reactiva.
    4. Señales. (Ejercicios)
    5. Proyecto Juego: Snake. (Ejercicios)
    6. Creación rápida de aplicaciones: StartApp y Mailboxes.

Recursos