Exercício do Exame de Recurso de 1997: Problema

Para fazer a Gestão de cada Hotel ligado a uma Central de Reservas, 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 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 hotel.
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).

(c) Delfim F. Marado Torres
1999-04-13