Nesta unidade curricular estuda-se o paradigma funcional de programação, tendo por base a linguagem de programação Haskell.
- Programação funcional em Haskell.
-
- Conceitos fundamentais: expressões, tipos, redução, funções e recursividade.
- Conceitos avançados: funções de ordem superior, polimorfismo, tipos indutivos, classes, modularidade e monades.
- Estruturas de dados e algoritmos.
- Tipos abstractos de dados.
Programa Detalhado
- Introdução ao paradigma funcional de programação
- Conceitos fundamentais da programação em Haskell
- Noção de programa e a sua execução. Expressões e valores. Redução. Tipos. Definições. Estruturas condicionais e concordância de padrões. Definições locais. Módulos.
- Funções
- Funções pré-definidas sobre tipos básicos. Funções não recursivas. Funções recursivas. Parâmetros de acumulação. Polimorfismo. Funções anónimas. Funções de ordem superior.
- Listas
- O conceito de lista. Listas por compreensão. Listas infinitas. Operações básicas sobre listas. As funções map e filter. As funções foldr e foldl. Outras funções de ordem superior. Funções para manipulação de texto. Algoritmos de ordenação: insertion sort, merge sort, quick sort.
- Tipos, classes e polimorfismo
- Definição de novos tipos de dados. Classes e instâncias. Classes derivadas. Hierarquia de classes. Algumas classes pré-definidas. Polimorfismo e sobrecarga. Classes de construtores.
- Árvores
- Árvores binárias. Árvores binárias de procura. Árvores generalizadas.
- Monades
- Noção de monade e sua definição. O monade IO. O monade Maybe. Outros monades.
- Tipos Abstractos de Dados
- O conceito de tipo abstracto de dados e a sua implementação em Haskell. Alguns exemplos: conjuntos, tabelas, pilhas e filas de espera.