Objetivos

Esta UC corresponde a uma introdução ao paradigma funcional da programação. É usada a linguagem de programação Haskell que não requer dos alunos conhecimentos sobre a arquitetura física dos computadores e que para além dos tópicos fundamentais da programação funcional permite abordar conceitos avançados. Assim, no fim da disciplina, o aluno deverá ser capaz de:

  • Resolver problemas de programação decompondo-os em problemas mais pequenos;
  • Desenvolver e implementar algoritmos recursivos sobre listas e sobre árvores;
  • Desenvolver programas tirando partido da utilização de funções de ordem superior;
  • Aplicar a noção de tipo principal e de polimorfismo;
  • Definir tipos algébricos, enquadrá-los na hierarquia de classes e programar com esses tipos;
  • Escrever programas interativos.

Programa

  1. Introdução ao paradigma funcional de programação. Aspectos básicos da linguagem Haskell: valores, expressões e tipos. O mecanismo de avaliação. Inferência de tipos. Definições multi-clausais de funções. Polimorfismo.
  2. Listas. Funções recursivas sobre listas. Modelação de problemas usando listas.
  3. Algoritmos de ordenação de listas: insertion sort, quick sort e merge sort.
  4. Ordem superior. Padrões de computação. Programação com funções de ordem superior.
  5. Tipos algébricos. Definição de novos tipos e sua utilização na modelação de problemas.
  6. Árvores. Árvores binárias, árvores de procura, árvores irregulares e algoritmos associados.
  7. O mecanismo de classes no tratamento do polimorfismo e da sobrecarga de funções.
  8. O tratamento puramente funcional do input/output. O monade IO.

Bibliografia

Principal

  1. Bird, R. (1998). Introduction to Functional Programming using Haskell. Prentice-Hall.
  2. Valença, J. M., Barros, J. B. (1999). Fundamentos da Computação. Livro II: Programação Funcional, Universidade Aberta.

Complementar

  1. Hutton, G. (2016). Programming in Haskell. Cambridge University Press.
  2. Thompson, S. (2011). Haskell: The Craft of Functional Programming. Addison-Wesley.

Atualizado: