Programação Funcional
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
- 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.
- Listas. Funções recursivas sobre listas. Modelação de problemas usando listas.
- Algoritmos de ordenação de listas: insertion sort, quick sort e merge sort.
- Ordem superior. Padrões de computação. Programação com funções de ordem superior.
- Tipos algébricos. Definição de novos tipos e sua utilização na modelação de problemas.
- Árvores. Árvores binárias, árvores de procura, árvores irregulares e algoritmos associados.
- O mecanismo de classes no tratamento do polimorfismo e da sobrecarga de funções.
- O tratamento puramente funcional do input/output. O monade IO.
Bibliografia
Principal
- Bird, R. (1998). Introduction to Functional Programming using Haskell. Prentice-Hall.
- Valença, J. M., Barros, J. B. (1999). Fundamentos da Computação. Livro II: Programação Funcional, Universidade Aberta.
Complementar
- Hutton, G. (2016). Programming in Haskell. Cambridge University Press.
- Thompson, S. (2011). Haskell: The Craft of Functional Programming. Addison-Wesley.