Programação Funcional e em Lógica
Expressões e tipos em Haskell, relações e procura em Prolog, com exemplos trabalhados e prática.
PFL usa Haskell para transformar valores com funções e Prolog para descrever relações e procurar soluções. Em Haskell, acompanha as substituições e as restrições de tipo; em Prolog, segue as ligações de variáveis e os pontos de retrocesso.
O percurso
Em Haskell, começa pelas expressões e padrões, depois aprende a deduzir tipos. Listas e recursão cobre compreensões, ordenação, intercalação, inserção em posições, permutações e bits das fichas iniciais. Ordem superior reúne composição, folds e preguiça. Passa depois às árvores e tipos algébricos, às ações I/O e parsers e às propriedades com QuickCheck.
Em Prolog, começa por termos, unificação e SLD. Estuda listas, aritmética e corte antes de recolher soluções e compor estruturas. A última página aplica essas ferramentas a procura, jogos e manipulação simbólica.
Cada lição termina com questões que testam decisões diferentes. Resolve-as sem abrir as pistas; depois compara a justificação, e não apenas a resposta. A cheat sheet serve para rever condições e padrões depois de estudar as explicações.
Como resolver uma questão
Num tipo, atribui letras aos valores desconhecidos e impõe as igualdades pedidas pelas aplicações. Numa recursão, escreve um caso pequeno, o caso base e a medida que diminui. Num fold, expande as aplicações antes de fazer contas. Numa consulta Prolog, renomeia as variáveis de cada cláusula, escolhe o objetivo mais à esquerda e assinala os pontos de retrocesso.
Testa também entradas vazias, resultados já instanciados e casos que violam uma pré-condição. Um programa que funciona num só exemplo pode continuar parcial, perder repetidos ou entrar num ramo infinito. Nas transformações de árvores, conserva os construtores e os casos de ausência; em consultas sobre «todos», verifica também os ids que não existem na base.
Os exemplos Haskell e Prolog têm programas completos no editor. O motor Prolog do site é SWI; a ficha da cadeira indica SICStus. A sintaxe base é comum, mas os predicados de biblioteca e de escrita diferem entre motores. As páginas assinalam onde o comportamento foi confirmado apenas em SWI.
Avaliação de 2026/27
A apresentação de 2026 divide a cadeira em dois módulos de seis semanas. Em época normal, a média dos dois testes tem peso de 90% e a média dos dois trabalhos individuais tem peso de 10%. Em recurso, o exame pode substituir um ou ambos os testes, conservando a componente prática. A apresentação exige pelo menos 75% das aulas TP e indica exceções para trabalhadores-estudantes e repetentes que cumpriram a frequência no ano anterior. Consulta as regras e os prazos atuais.
Os dez PDFs funcionais disponíveis foram novamente conferidos em outubro de 2026. As folhas 1 e 2 têm data de 17 de setembro e a folha 3 de 23 de setembro de 2026; as aulas 1 a 6 têm carimbo de 2026. As fichas posteriores, os materiais Prolog de 2026/27 e as provas atuais continuam por confirmar. O restante percurso usa referências históricas e técnicas; os projetos têm requisitos próprios no Moodle.
Referências complementares
Os materiais da edição atual do Moodle definem o percurso da cadeira. Estas referências ajudam a consultar definições e detalhes das ferramentas. Confirma a versão quando segues documentação de software.
- Expressões, avaliação e tipos em Haskell: Documentação de Haskell, Learn You a Haskell, Hoogle.
- Lambda, currying e ordem superior: Capítulo 7 de Programming in Haskell, curso oficial de Graham Hutton.
- Provas partilhadas por estudantes: o arquivo de PFL no Accio inclui materiais de 2024/25 e uma exportação com cabeçalho 2025/26 e data de março de 2026. Apoiam a seleção de aplicações, como agrupamento por relação, substituição de expressões e quantificação em Prolog. As soluções e comentários anexos precisam de verificação independente; não confirmam perguntas nem critérios de uma prova futura.
- Referência histórica: os slides funcionais de Pedro Vasconcelos no arquivo têm datas de 2021 a 2023; os slides lógicos de DCC/FCUP têm datas de 2018 a 2020. Ajudam a explicar técnicas, mas não confirmam a avaliação de 2026/27.
- Entrada e saída e parsers com combinadores: Material oficial de Graham Hutton.
- Propriedades e testes com QuickCheck: documentação do QuickCheck no Hackage.
- Lógica, unificação e execução em Prolog: SWISH, Learn Prolog Now, capítulo 2, Unificação no Wikibooks.
- Recursão, corte e procura em Prolog: Documentação do SICStus.
- Recolher soluções e compor estruturas em Prolog: operadores de SWI,
=../2,keysort/2, indexação JIT.
Vídeos para acompanhar o estudo
Para acompanhar o estudo com vídeo, vê a secção Escolher a função de ordem superior e a secção Recursão que termina.