Ano lectivo 1999/00 (semestre ímpar)
Sumários das aulas teóricas
Aula: 1,2,3,4,5,6,7,8,9,10,11,12,13,14
Sumário: Apresentação do docente e da disciplina.
Programação declarativa versus programação
imperativa. Breve história da Programação em Lógica..
Sumário: Conceitos básicos da programação
em lógica: programa como conjunto de factos (axiomas) e regras;
interpretação universal das variáveis em factos e
regras; perguntas/golos e interpretação existencial de variáveis.
Primeira introdução à semântica operacional
da programação em lógica: derivação
SLD; backtracking (ou retrocesso).
Sumário: Introdução às noções
de termo e símbolo funcional. Ddescrição da sintaxe
de programas Prolog "puros". Estruturas de dados recursivas. Programação
de relações simples sobre números naturais. Introdução
às listas em Prolog. Programação de predicados simples
sobre listas.
Sumário: Continuação de programação
com listas. Outras estruturas de dados recursivas: programas sobre árvores
binárias e fórmulas de lógica proposicional.
Sumário: Primitivas Prolog para cálculo aritmético:
predicado is/2, operadores aritméticos, comparadores. Uso
das primitivas em programas simples. Recursividade terminal e versões
"iterativas". "Tradução" de versões iterativas de
programas em linguagens imperativas para programas em lógica com
recursividade terminal.
Sumário: Análise mais detalhada da semântica
operacional de programas em lógica. Problemas de ciclos infinitos
e de soluções redundantes. Controlo procedimental de programas:
"cuts".
Sumário: Predicados de sistema para análise
de tipo e estrutura de dados: integer/1, atom/1, compound/1, real/1,
atomic/1, functor/3, arg/3 e =../2. Predicados de sistema meta-lógicos:
var/1,
nonvar/1, ground/1, ==/2, copy_term/2 e call/1. Variáveis
e predicados como objectos. Negação por falha finita.
Sumário: Predicados extra-lógicos com efeitos colaterais:
processamento de input/output; predicados de manipulação/alteração
de programas.
Sumário: Técnicas de programação
aproveitando o uso de não determinismo.