Programação Funcional
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Ciência de Computadores |
Ocorrência: 2021/2022 - 2S
Ciclos de Estudo/Cursos
Língua de trabalho
Português
Objetivos
Introdução ao paradigma de programação funcional usando a linguagem Haskell.
Resultados de aprendizagem e competências
No final desta UC, o estudante deverá ser capaz de:
1. Definir funções usando equações com padrões;
2. Codificar algoritmos recursivos elementares sobre listas e árvores em Haskell
3. Usar tipos algébricos para representar dados problemas elementares de programação
4. Decompor problemas de programação como composição de funções mais simples usando ordem superior e lazy-evaluation
5. Provar propriedades elementares de programas recursivos usando teoria equacional e indução.
Modo de trabalho
Presencial
Programa
Expressões, valores e tipos básicos. Definições de funções simples; tipos funcionais. Execução passo-a-passo usando substituição. Tipos compostos: listas e tuplos. Algumas funções sobre listas do prelúdio-padrão. Notação de listas em compreensão. Definições recursivas. Polimorfismo paramétrico
Classes de tipos do prelúdio para sobrecarga de operadores.
Funções de ordem superior. Processamento de ficheiro usando o mónada IO. Resolução de problemas elementares de programação competitiva em Haskell.
Definição de novos tipos de dados. Estudo de dois casos: implementação de conjuntos e tabelas associativas usando árvores binárias de pesquisa. Representação de conjuntos, relações binárias e grafos; algoritmos elementares sobre árvores e grafos.
Provas de propriedades de programas recursivos usando teoria equacional e indução.
Bibliografia Obrigatória
Hutton Graham 1968-;
Programming in Haskell. ISBN: 9780521692694 pbk
Bibliografia Complementar
Richard Bird;
Introduction to functional programming using Haskell. ISBN: 978-0-13-484346-9 pbk
Richard Bird; Thinking functionally with Haskell, Cambridge University Press, 2015. ISBN: 978-1107452640
Métodos de ensino e atividades de aprendizagem
Aulas teóricas usando exposição oral, projeção de slides e demonstração de programas. Aulas laboratoriais em computador.
Tipo de avaliação
Avaliação distribuída com exame final
Componentes de Avaliação
Designação |
Peso (%) |
Exame |
70,00 |
Trabalho laboratorial |
10,00 |
Teste |
20,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Estudo autónomo |
110,00 |
Frequência das aulas |
52,00 |
Total: |
162,00 |
Obtenção de frequência
Presença em pelo menos 66% das aulas laboratoriais lecionadas.
Fórmula de cálculo da classificação final
A classificação final é determinada pelas componentes de exame final, um teste realizado a meio do semestre e pela resolução não supervisionada de exercícios de programação com correção automática. Os exercícios para avaliação devem ser resolvidos individualmente. Será usado o sistema automático MOSS para detetar e desqualificar plágios.
Classficação final = 70% * Exame + 20% Teste + 10% Exercícios
Esta fórmula é valida para aprovação em ambas as épocas de exame.
Avaliação especial (TE, DA, ...)
A avaliação segue os mesmos critérios indicados acima para os estudantes de inscrição ordinária.
Os trabalhadores estudantes estão dispensados de presença nas aulas práticas para a obtenção de frequência à UC.
Melhoria de classificação
O exame de melhoria de nota permite melhorar a componente de exame (70%) na fórmula acima e inclui ainda um exercício opcional para melhoria da componente correspondente ao teste (20%). A classificação de exercícios ao longo do semestre não pode ser melhorada.
Observações
Júri da Unidade Curricular: Pedro Vasconcelos e Manuel Barbosa