Guião para a Segunda Aula Prática de IPL

Delfim F. Marado Torres

8 de Março de 1999

Agradeço comentários, sugestões ou correcções. O meu endereço de correio electrónico é < delfim@mat.ua.pt > . Desde já obrigado.

1  Objectivos da aula

2  Exercícios

2.1  Exercício (regras, recursividade, como o prolog responde às questões)

Considere a seguinte situação:

a)
Instrua o interpretador de prolog sobre esta situação, usando para o efeito o predicado sobre.
b)
Exprima por meio de fórmulas lógicas (e de seguida na notação do prolog) as seguintes regras de conhecimento:
i)
Se um objecto está sobre outro, então está acima dele.
ii)
O predicado acima_de é transitivo.
c)
Coloque a seguinte questão ao interpretador de prolog: ``B está acima da mesa?''.

2.2  Exercício (regras, retrocesso e recursividade)

Numa empresa fabricante de equipamento eléctrico para cozinhas, encontram-se as seguintes proposições sobre a constituição de um fogão:

Responda, então, às alíneas seguintes:

a)
Recorrendo apenas aos predicados parte-de e feito-em (note que uma palavra diferente não corresponde necessariamente a um predicado ou argumento distinto), escreva um conjunto de cláusulas Prolog que descrevam precisamente o conhecimento contido nas frases acima.
b)
Tomando em consideração a Base de Conhecimento criada na alínea anterior, diga como procederia, face a um Interpretador de Prolog, para obter resposta para às seguintes questões:
c)
Tomando em consideração a Base de Conhecimento criada na alínea a), escreva um predicado que permita determinar se um dado objecto faz ou não parte do fogão.

Solução:

% a)

parte_de(estrutura,fogao).
parte_de(cordao_electrico,fogao).
parte_de(resistencia,estrutura).
parte_de(painel,estrutura).
parte_de(botao,painel).
parte_de(fio,cordao_electrico).
parte_de(isolador,cordao_electrico).


feito_em(resistencia,metal).
feito_em(botao,plastico).
feito_em(fio,metal).
feito_em(isolador,plastico).

% b):  feito_em(X,metal).
%           OU (analisar diferen,cas!!)
%      feito_em(X,metal), write(X), nl, fail.


%      feito_em(X,M), M \= plastico.
%           OU (analisar diferen,cas!!)
%      feito_em(X,M), M \= plastico, write(X), nl, fail.

% c):  parte_fogao(X) :- parte_de(X,fogao).
%      parte_fogao(X) :- parte_de(X,Y), parte_fogao(Y).

3  Mais ideias a reter