Programación Funcional Avanzada (CI-4251)

Este es un curso electivo libre del área de Lenguajes de Programación que se ofrece una vez al año en el trimestre Abril-Julio. Como se trata de una electiva libre, supongo que Ud. está interesado en el tema, así que no se trata de «pasar» sino de ver cuán dedicado e interesado está en el tema, y la calidad del trabajo resultante. Por lo tanto, a menos que Ud. no haga absolutamente nada durante el trimestre, seguramente aprobará la asignatura con tres (3) si cumple con las tareas. Alcanzar el cuatro (4) o el cinco (5) dependerá de producir programas de maneras creativas y con desempeño notable.

Herramientas de Programación

Usaremos el lenguaje de programación Haskell para desarrollar las soluciones a las tareas propuestas. Dependiendo de la audiencia y el avance del curso, se estudiará Erlang para el nicho específico de programación concurrente distribuida.

Haskell

Trabajaremos con GHC, el entorno interactivo del Glasgow Haskell Compiler y su librería base. Adicionalmente, la herramienta de gestión de dependencias y aplicaciones stack. La versión particular de GHC será indicada durante la primera sesión.

Siga las instrucciones en la página de descargas para instalar GHC y stack.

Todos los archivos que formen parte de su proyecto deben estar completa y correctamente documentados (los errores ortográficos son inaceptables y serán penalizados) utilizando «Literate Haskell»:

Si alguna de las tareas incluye la construcción de uno o más módulos, estos deben estar completa y correctamente documentados usando Haddock:

La documentación de Haddock abunda en detalles acerca de las marcas a utilizar para lograr estos resultados.

La evaluación de sus proyectos tomará en cuenta el uso correcto del estilo funcional, el aprovechamiento de las librerías del lenguaje (no reimplantar cosas que existen), y la eficiencia algorítmica. No basta «que funcione»; tiene que ser eficiente.

Tareas

Las tareas son individuales. Habrá seis o siete tareas a lo largo del trimestre.

Si encuentran en biblioteca, hemeroteca o Internet un artículo, fragmento o aplicación que resuelva total o parcialmente sus proyectos, es válido utilizarlo siempre y cuando cumpla con dos condiciones simultáneamente:

Resolver problemas apoyándose en soluciones de otros es perfectamente válido, siempre y cuando se tenga el coraje académico de reconocerlo.

Cronograma Habitual y Material de Apoyo

El orden de las primeras doce sesiones siempre es el mismo. El resto de las sesiones puede variar dependiendo de los intereses del grupo y de los cambios en la tecnología.

Solamente están disponibles las láminas de la última oportunidad en que se dictó el curso. Las versiones de cursos anteriores no están disponibles, no insista. Si durante alguna clase se hacen correcciones o agregados, espere encontrar la versión corregida aquí eventualmente.

El material de apoyo consiste en fragmentos de código presentado en clase. La mayoría de los ejemplos en las láminas no están provistos, con la intención de que Ud. tenga que escribirlos para experimentar por su cuenta.

Láminas de Clase

Programas de Ejemplo

Ediciones Anteriores