Programação Funcional e em Lógica
| Áreas Científicas |
| Classificação |
Área Científica |
| OFICIAL |
Engenharia Informática e Computação |
Ocorrência: 2024/2025 - 1S 
Ciclos de Estudo/Cursos
| Sigla |
Nº de Estudantes |
Plano de Estudos |
Anos Curriculares |
Créditos UCN |
Créditos ECTS |
Horas de Contacto |
Horas Totais |
| L.EIC |
376 |
Plano Oficial |
3 |
- |
6 |
52 |
162 |
Língua de trabalho
Português
Obs.: Suitable for english-speaking students
Objetivos
Os paradigmas de Programação Funcional e de Programação em Lógica apresentam abordagens declarativas e baseadas em processos formais de raciocínio à programação, mais apropriada para a resolução de alguns tipos de problemas.
Objetivos: Adquirir familiaridade com os paradigmas da Programação Funcional e da Programação em Lógica. Desenvolver as capacidades de raciocínio abstracto e de representação de problemas de forma declarativa.
Resultados de aprendizagem e competências
No final da UC, os estudantes deverão ser capazes de:
- Usar tipos pré-definidos e algébricos de Haskell para representar valores de um domínio específico
- Definir transformações genéricas sobre estruturas de dados indutivas (por exemplo: árvores) como funções polimórficas em Haskell
- Decompor problemas de programação em funções puras em Haskell operando sobre tipos de dados estruturados
- Provar correção de programas em Haskell usando definições com equações e indução
- Representar factos e relações como programas em Prolog
- Compreender o modelo de execução de programas em Prolog
- Modelar problemas de pesquisa como programas lógicos e queries em Prolog
Modo de trabalho
Presencial
Programa
- Programação Funcional (7 semanas)
- Expressões, avaliação e valores. Tipos pré-definidos. Definições usando equações.
- Polimorfismo paramétrico e “bounded”. Classes de tipos fundamentais.
- Expressões lambda. Aplicação parcial e “currying”. Funções de ordem superior do prelúdio-padrão.
- Definição de tipos algébricos; encaixe de padrões e definições recursivas.
- Exemplos de programação: árvores equilibradas; árvores sintáticas;layout de texto; visualização e jogos.
- Programação com I/O.
- Provas de correção de programas usando definições por equações e indução.
- Programação em Lógica (6 semanas)
- Lógica proposicional e de predicados. Cláusulas de Horn. Factos e regras. Termos de Herbrand. Unificação.
- Linguagem Prolog. Modelo de execução. Resolução SLD. Negação por falha.
- Bases de factos e relações. Programação com recursão e estruturas.
- Aritmética. Predicados extra-lógicos e de controlo.
- Exemplos de programação: procura, jogos, manipulação simbólica.
Bibliografia Obrigatória
Simon Thompson;
Haskell the craft of functional programming. ISBN: 0- 201-34275-8
Graham Hutton;
Programming in Haskell, Cambridge University Press, 2016. ISBN: 978-1316626221
Leon Sterling;
The Art of Prolog. ISBN: 0-262-69163-9
Bibliografia Complementar
Bryan O'Sullivan, Don Stewart, and John Goerzen; Real World Haskell, O'Reilly Media, 2008. ISBN: 9780596514983
Richard Bird;
Introduction to Functional Programming using Haskell, Pearson, 1998. ISBN: 978-0-13-484346-9
Ivan Bratko;
Prolog programming for artificial intelligence. ISBN: 0-201-40375-7
Métodos de ensino e atividades de aprendizagem
As aulas teóricas são usadas para exposição de fundamentos, acompanhada da apresentação e discussão de exemplos ilustrativos. As aulas teórico-práticas permitem a sistematização de conhecimentos por meio da resolução de exercícios de programação e acompanhamento da realização dos trabalhos práticos.
Software
GHC
SICStus Prolog
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
| Designação |
Peso (%) |
| Teste |
50,00 |
| Trabalho prático ou de projeto |
50,00 |
| Total: |
100,00 |
Componentes de Ocupação
| Designação |
Tempo (Horas) |
| Elaboração de projeto |
60,00 |
| Estudo autónomo |
50,00 |
| Frequência das aulas |
52,00 |
| Total: |
162,00 |
Obtenção de frequência
Um estudante obtém frequência na UC se formar grupos de trabalho para os dois trabalhos práticos (TP1 e TP2), participar ativamente na realização dos mesmos, e entregar ambos os trabalhos dentro dos prazos previstos.
Fórmula de cálculo da classificação final
(CF = Classificação Final, P = Componente Prática, T = Componente Teórica, ER = Exame de Recurso)
(TP1, TP2 = Trabalho Prático 1 e 2, respetivamente)
(MT1, MT2 = Mini-Teste 1 e 2, respetivamente)
P = 50% * TP1 + 50% * TP2
T = 50% * MT1 + 50% * MT2
Em Época Normal:
CF = 50% * P + 50% * T
Em Época de Recurso:
CF = 50% * P + 50% * ER
Notas:
- A nota mínima em cada componente (TP1, MT1, TP2, e MT2) é de 35%
- Em época de recurso, a nota mínima é de 35% em cada uma das partes do ER
- A nota máxima entre as componentes TP1 e MT1 é, no máximo, igual à nota mínima de entre estas duas componentes acrescida de 6 valores
- A nota máxima entre as componentes TP2 e MT2 é, no máximo, igual à nota mínima de entre estas duas componentes acrescida de 6 valores
- Em época de recurso, aplicam-se as mesmas regras, substituindo MT1 e MT2 pelas partes correspondentes do ER
Provas e trabalhos especiais
Não há provas ou trabalhos especiais.
Avaliação especial (TE, DA, ...)
As regras de avaliação aplicam-se a todos os estudantes, independentemente dos seus estatutos. Estudantes que, pelos seus estatutos, estejam dispensados de frequentar as aulas práticas devem contactar os docentes para acompanhamento dos trabalhos.
Melhoria de classificação
A componente prática não pode ser melhorada em época de recurso nem em épocas especiais.
A componente teórica pode ser melhorada em exame a realizar em época de recurso.
Observações
Apenas é possível realizar os trabalhos práticos no calendário regular, não sendo possível realizar os trabalhos práticos ou melhorar a sua nota em épocas especiais.