La materia tiene por objetivo que l@s estudiantes comprendan, manejen y se familiaricen con conceptos fundamentales de la programación y su importancia en la tarea de programar
Sean capaces de utilizar dichas nociones para la confección de programas sencillos en un lenguaje funcional.Sean capaces de demostrar propiedades sencillas de programas funcionales utilizando inducción estructural y  de aplicar técnicas de transformación de programas en casos particulares.

Modos de Cursada: Cuatrimestral Presencial

Horas Semanales: 4 horas

Demanda de tiempo en casa semanal: 4 horas

Sitio web:

  • Aún no disponible

Programa de la materia:

Contenidos Mínimos:

  • Nociones generales del paradigma funcional:
    Valores y expresiones. Las funciones como valores. Mecanismos de definición de expresiones y valores. Ecuaciones orientadas para definir funciones. Sintaxis. Sistemas de tipos Hindley-Milner. Tipos básicos. Constructores de tipos. Polimorfismo. Sintaxis para valores de cada tipo (caracteres, tuplas, listas, strings, funciones). Funciones parciales y totales. Funciones de alto orden. Currificación.
  • Induccion y recursión: Definición inductiva de conjuntos. Definición recursiva de funciones sobre conjuntos. Demostraciones inductivas sobre dichas funciones. Ejemplos: programas, expresiones aritméticas, listas.
  • Listas: Listas como tipo inductivo. Funciones básicas sobre listas (append, head, tail, take, drop, reverse, sort, elem, etc.). Funciones de alto orden sobre listas. Patrón de recorrido: map. Patrón de selección: filter. Patrón de recursión: foldr. Listas por comprensión. Demostración de propiedades de listas y funciones sobre listas.
  • Sistemas de tipos: Nociones básicas. Sistemas de tipado fuerte. Ventajas y limitaciones de los lenguajes de programación con tipos. Lenguaje de tipos. Asignación de tipos a expresiones. Propiedades Interesantes de esta asignación. Algoritmo de inferencia. Mecanismos de definición de tipos nuevos y de funciones sobre ellos. Tipos algebraicos recursivos. Ejemplos: enumeraciones, listas, árboles binarios y generales.
  • Transformación de Programas: Motivación. Obtención de programas a partir de especificaciones. Mejoramiento de eficiencia, con corrección por construcción. Técnicas particulares de transformación: tupling, eliminación de recursión, fusión. Transformación de listas por comprensión en expresiones que utilizan map, filter y concat.
  • Lambda Cálculo: Definición del lenguaje. Sintaxis. Definición de sustitución. Modelo de computación. Nociones de alfa, beta y eta reducción. Semántica operacional. Lambda cálculo como modelo teórico de los lenguajes funcionales. Representación de booleanos, pares, números naturales, listas y otras construcciones.