Intodução à Programação Lógica
MAC, Mat, EM (3o ano)
Exame de Época de Recurso
Data: 12 de Setembro de 1997
Hora: 10:00
|
|
Dispõe de 3:00 horas para realizar este exame |
|
Leia as questões com toda a atenção |
e Responda com calma e clareza em folha convencional |
Questão 1
Para gerir uma Central de Reservas de Automóveis e de Hóteis portugueses foram
identificadas as seguintes Entidades e Relações:
a Viatura (especificada pela marca, modelo, matrícula,
cilindrada e número de lugares), o Hotel (descrito pelo
nome, classificação (em número de estrelas), localização, telefone), o Cliente (caracterizado por um nome, bilhete de identidade,
profissão, telefone), e a Reserva que é feita por um
Cliente para uma Viatura, ou para um Hotel, e que é descrita por: um código de reserva;
número de pessoas; data de aluguer (dia, mes); número de dias da ocupação; e, caso se
trate de um Hotel, regista-se ainda o número de quartos e respectivo tipo (duplo,
simples, ou suite).
Antes de se criar a Base de Dados Relacional, que servirá de suporte ao sistema
informático final, está-se a pensar fazer um protótipo do sistema num ambiente de
programação declarativo, lógico.
Responda, então, às alíneas seguintes:
- a)
- Escolha os predicados (indique o seu nome e todos os seus argumentos)
que deve usar em Prolog para modelar as entidades e as
relações entre elas (para concretizar a sua resposta, mostre como exemplo 1, ou 2,
factos concretos para cada um desses predicados).
- b)
- De acordo com o modelo que escolheu acima, desenvolva predicados para:
- b1)
- escrever (imprimir no écran) o nome de todos os Clientes que fizeram pelo menos uma
Reserva para um dado Hotel, ou Viatura;
- b2)
- construir uma lista com a localização de todos os Hotéis reservados para o mês de
ágosto';
- b3)
- acrescentar à base de conhecimento (BC) factos conta(Mes,N) que indiquem, para
cada mês do ano, o número de reservas que se registaram para determinado Hotel.
- c)
- assumindo que L é a lista de locais produzida na linha b2), escreva um
predicado filtra(L,L1) que constrói a lista L1 eliminando de L
todos os repetidos;
- d)
- defina a relação shift(L1,L2) tal que L2 seja a lista L1
(resultante da alínea anterior) ``deslocada rotacionalmente'' de um elemento para a
esquerda. Por exemplo,
?- shift( [aveiro, coimbra, braga, porto], L2).
L2 = [coimbra, braga, porto, aveiro]
- e)
- assumindo que os factos conta/2, referidos na alínea b3), foram correctamente
acrescentados à BC, escreva uma nova operação para determinar o mês em que houve mais
reservas do Hotel em causa
- f)
- suponha agora que em vez de ter na BC os 12 factos conta/2 referidos em b3),
tinha um só facto contas/1 com a lista dos 12 pares:
contas( [(jan,100),(fev,50),...,(dez,450)] ).
desenvolva um predicado soma/0 que escreva no écran o total das reservas
feitas ao longo do ano.
%-------------------------
Questão 2
No regresso duma longa viagem por Portugal, Timóteo passou pela Central de Reservas
(modelada no problema anterior) e fez, dos Hotéis que frequentou, as seguintes
observações1:
- Sempre que a comida era boa, os empregados eram delicados;
- Todos os Hotéis abertos durante todo o ano tinham vista para o mar;
- A comida só era má em alguns hotéis baratos;
- Os Hotéis com piscina tinham os muros cobertos de nadressilva;
- Os Hotéis que estavam abertos apenas durante uma estação do ano tinham empregados
indelicados;
- Nenhum Hotel barato admitia a presença de cães;
- Os Hotéis sem piscina não tinham vista para o mar.
A dita Central de Reservas pretende, obviamente, incorporar na BC do seu sistema de
prototipagem em Prolog estas informações preciosas.
Responda então às alineas seguintes:
- a)
- Recorrendo apenas aos predicados de aridade 2 (cujo 1\bo argumento será
sempre o Hotel em causa) comida, empregados, abertura, custo, vista, piscina, muro,
proibido escreva cláusulas Prolog que traduzam as opiniões acima expressas pelo
Timóteo.
- b)
- Tomando em consideração o conjunto de cláusulas que criou na alínea anterior:
- b1)
- diga como formulava ao Interpretador de Prolog (IP) a seguinte questão: ``quais são os
Hotéis que servem boa comida tendo os muros cobertos com madressilva''.
- b2)
- diga se o Interpretador de Prolog (IP) consegue concluir pela veracidade da seguinte
afirmação: `òs proprietários de cães podem alojar-se com os ditos em Hotéis com
muros recobertos a madressilva''.
%-------------------------
Questão 3
Ainda à volta do sistema de prototipagem em Prolog da
Central de Reservas, desenhou-se a gramática abaixo (apresentada na notação lógica DCG) para definir uma linguagem que permita descrever viaturas.
viaturas --> marca, modelo, matriculas.
marca --> [pal(M)].
modelo --> [pal(M)], cilindrada, lugares.
cilindrada--> numero.
lugares --> numero.
numero --> [num(N)].
matriculas--> matricula, outras.
outras --> [','], matriculas.
outras --> [].
matricula --> [mat(X)].
Responda, então, às alíneas seguintes:
- a)
- Diga qual a resposta de um Interpretador de Prolog (IP),
à questões:
- a1)
?- viaturas( [pal(ferrari),pal(f40),num(300),num(8),mat(45-66-AX),mat(66-68-EI)], [] ).
- a2)
?- viaturas( [pal('Mercedes'),pal(c220D),num(2155),num(5)], [] ).
- b)
- Modifique a gramática supra de modo a: permitir que cada frase contenha a descrição
de viaturas de marcas e/ou modelos diferentes; e que não seja obrigatório escrever o
número de lugares.
- c)
- Acrescente à DCG supra as acções semânticas e
os argumentos que achar necessários de modo a:
- c1)
- validar a cilindrada que terá de ser um número superior, ou igual, a 1000 e validar o
número de lugares que deverá estar no intervalo [2,10[;
- c2)
- validar a marca do automóvel que terá de ser uma de entre as marcas existentes numa
lista que se supõe existir na BC na forma do predicado marcas([peugeot, fiat,
ferrari, mercedes, ...]).
%-------------------------
Questão 4
Para fazer a Gestão de cada Hotel ligado à Central de Reservas de que vimos falando,
construiu-se a seguinte base de factos (BF):
% cargo(C) :- o nome C define um cargo profissional em hotelaria.
cargo(director).
cargo(recepcionista).
cargo(grumete).
cargo(governanta).
cargo(barman).
% exerceCargo(P,C,H) :- a pessoa P exerce o cargo C no hotel H.
exerceCargo(pedro,grumete,ibis).
exerceCargo(delfim,director,penta).
exerceCargo(mario,barman,alfa).
exerceCargo(zezinha,governanta,afonso5).
exerceCargo(analia,recepcionista,ibis).
exerceCargo(luis,recepcionista,penta).
% manda(C,S) :- a pessoa que exerce o cargo C 'e
o chefe directo da pessoa que exerce o cargo S.
manda(director,recepcionista).
manda(director,governanta).
manda(recepcionista,grumete).
manda(governanta,barman).
% dormeMuito(P) :- a pessoa P dorme muitas horas.
dormeMuito(antonio).
dormeMuito(sandra).
% deita(P,H) :- a pessoa P deita-se as H horas.
deita(antonio,0).
deita(ana,03).
deita(sandra,22).
% hospedada(P,H) :- a pessoa P esta hospedada no hotel H.
hospedada(antonio,penta).
hospedada(ana,ibis).
hospedada(sandra,afonso5).
e o seguinte programa Prolog:
% chamaBarman(P) :- a pessoa P chama por um barman.
chamaBarman(P) :- dormeMuito(P).
chamaBarman(P) :- deitaTarde(P).
chamaBarman(P) :- mandadoPor(barman,P).
% mandadoPor(S,C) :- a pessoa S recebe ordens (directas ou nao) de C.
mandadoPor(S,C) :- manda(C,S), !.
mandadoPor(S,C) :- manda(C1,S), mandadoPor(C1,C).
deitaTarde(P) :- deita(P,H), H>0, H<12.
Responda, então, às alíneas seguintes:
- a)
- Usando a Árvore de Prova, diga qual a resposta de um Interpretador de Prolog (IP), à questão
mandadoPor(grumete,director).
- b)
- Usando a Árvore de Procura, mostre qual seria a 1\ba e as restantes
respostas de um Interpretador de Prolog (IP), à questão
exerceCargo(Quem,OQue,ibis).
- c)
- Usando a Árvore de Procura, diga se um Interpretador de Prolog
(IP), teria de fazer retrocesso (backtracking) para responder afirmativamente à
questão
chamaBarman(ana).
- d)
- Usando o predicado manda/2 acima, escreva um novo predicado manda1(Nome1,Nome2)
que permita saber que a pessoa Nome1 manda directamente na pessoa Nome2,
atendendo ao cargo que exercem e ao local de trabalho (o hotel terá de ser o mesmo).
- e)
- Escreva as cláusulas que deveriam ser acrescentadas à BC para se poder validar que
todos os factos exerceCargo/3 (acima exemplificados) estavam aplicados
consistentemente, i.é, relacionavam uma pessoa com um cargo num
determinado .
- f)
- Escreva um predicado barmen(P,LN) que constrúa a lista de nomes, LN,
de todos os Barman que podem ser chamados pela pessoa P (essa pessoa terá de
estar hospedada num hotel e estar em condições de chamar um barman).
%-------------------------
Footnotes:
1 Problema inspirado no
Jogo 49 da livro 100 Jogos Lógicos da colecção O Prazer da Matemática
da Gradiva.