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 |
Nas aulas teórico-práticas foi sugerida a seguinte solução para o problema do macaco e das bananas:
accao(situacao(centro,cima_caixa,centro,nao_tem), apanhar, situacao(centro,cima_caixa,centro,tem)). accao(situacao(P,chao,P,TN), subir, situacao(P,cima_caixa,P,TN)). accao(situacao(P1,chao,P1,TN), empurrar(P1,P2), situacao(P2,chao,P2,TN)). accao(situacao(P1,chao,C,TN), andar(P1,P2), situacao(P2,chao,C,TN)). % cumpre_obj(S) <=> macaco pode obter banana partindo de S cumpre_obj(situacao(_,_,_,tem)). cumpre_obj(E) :- accao(E,A,S), cumpre_obj(S).
Depois de fazer o 'consult' do ficheiro, bastava perguntar ao interpretador:
?- cumpre_obj(situacao(porta,chao,janela,nao_tem)). yes
Com este exercício pretende-se que alterem o programa acima, de modo a sabermos qual a solução ``que o macaco encontra'' para apanhar a banana.
Com este exercício pretende-se que implementem um jogo da vida unidimensional com regras de evolução fixas, codificadas da seguinte maneira:
regra(0,0,0). regra(0,1,1). regra(1,0,1). regra(1,1,0).
Passamos a explicar. Convencionamos que 0 representa uma célula morta enquanto 1 representa uma célula viva. Uma colónia de seres unicelulares será então representada por uma lista de zeros e uns. Por exemplo,
[0,1,0,1,1,0,1,0,1,0,0,1,1,0]
Com as regras de evolução, vamos poder obter as gerações que se seguem à colónia inicial. As regras apresentadas acima, significam que:
Pretendemos:
?- proxima_geracao([1,0,0,0,1,1],L). L = [1,0,0,1,0,1] ?- proxima_geracao([1,1,1,1,0],L). L = [0,0,0,1,0]
?- jogo_vida(2,[1,0,1],L). L = [[1,1,1],[0,0,1]]
Para árvores binárias cujos vértices contêm números, considere-se a seguinte definição:
Uma árvore diz-se boa se para qualquer vértice, excepto as folhas, o número do vértice é igual à soma dos números nos dois vértices descendentes.
Usando esta definição, e a representação de árvores binárias que foi usada nas aulas teóricas e teórico-práticas, escreva um predicado boa/1 que recebe como parâmetro uma árvore binária, e que toma o valor verdadeiro sse a árvore é boa. Exemplos:
?- boa(arv(7,vazio,vazio)). yes ?- boa(arv(5,arv(2,vazio,vazio),arv(2,vazio,vazio))). no ?-boa(arv(5,vazio,arv(5,arv(3,vazio,vazio),arv(2,vazio,vazio)))). yes
Para construir um Sistema de Informação para uma Unidade de Arqueologia, foi criada uma Base de Conhecimento (BC) com os predicados
arqueologo/3 :- identifica cada arqueologo escavacao/3 :- identifica cada zona territorial onde se esta a fazer uma exploracao arqueologica achado/4 :- identifica cada objecto encontrado encontrou/3 :- relaciona um arqueologo com um achado descoberto numa escavacao
que descrevem as Entidades e Relações entre elas, identificados durante a fase de
análise.
De momento a Base contém os seguintes factos:
arqueologo( cod(1), nome(nuno), institut(um) ). arqueologo( cod(2), nome(ana), institut(um) ). arqueologo( cod(3), nome(luis), institut(ua) ). arqueologo( cod(4), nome(olga), institut(uc) ). arqueologo( cod(5), nome(rui), institut(uc) ). escavacao( nome(carvalheiras), loc(braga), sector(A13) ). escavacao( nome(conimbriga), loc(condeixa), sector(B44) ). escavacao( nome(citaniabriteiros), loc(braga), sector(H54) ). achado( ident(o1), classe(prato), mat(barro), estado(partido) ). achado( ident(o2), classe(prato), mat(metal), estado(intacto) ). achado( ident(o3), classe(prato), mat(barro), estado(fragmento) ). achado( ident(o4), classe(moeda), mat(ouro), estado(intacto) ). achado( ident(o5), classe(moeda), mat(bronze), estado(razoavel) ). achado( ident(o6), classe(anel), mat(ouro), estado(razoavel) ). achado( ident(o7), classe(anel), mat(prata), estado(torcido) ). encontrou( arq(1), obj(o1), escav(carvalheiras) ). encontrou( arq(1), obj(o2), escav(carvalheiras) ). encontrou( arq(4), obj(o6), escav(conimbriga) ). encontrou( arq(3), obj(o5), escav(conimbriga) ). encontrou( arq(4), obj(o4), escav(citaniabriteiros) ). encontrou( arq(1), obj(o3), escav(citaniabriteiros) ).
Suponha ainda que se definiram algumas regras de inferência, tais como:
encObj( Pessoa, Objecto ) :- arqueologo( cod(C), nome(Pessoa), _), encontrou( arq(C), obj(CObj), _), achado(ident(CObj),classe(Objecto),_,_).
Responda, então, às alíneas seguintes:
encObj( olga, moeda ).
encObj( nuno, OQue ).
indicando qual seria a primeira resposta automática e quais seriam obtidas após pedido explícito do utilizador.
encObj( Quem, anel ).
se altera se o predicado encObj/2 for reescrito trocando a última linha com a penúltima.
Ainda no contexto do problema anterior, pretende-se criar uma linguagem que permita
identificar um Arqueólogo (indicando o código, nome e instituição e indicar
todos os Objectos (referidos pelo respectivo identificador) por ele encontrados
numa determinada escavação (que também terá de ser identificada).
O que se lhe pede é que escreva uma DCG para definir a dita
linguagem, começando por dar exemplos de frases válidas da linguagem que vai
desenvolver.
Enriqueça posteriormente a sua DCG com atributos
(argumentos dos símbolos gramaticais) para retirar de cada frase, reconhecida pelo
programa derivado da DCG, os dados relativos ao arqueólogo
descrito.
Os modernos telefones prestam já serviços diversos, para além da simples ligação a
outro telefone. Esses serviços atingem-se começando por digitar o símbolo
"*", ou "#", seguido do código do serviço.
Supondo que de momento o Operador telefónico nacional disponibiliza:
pretende-se que modele o funcionamento do telefone usando um Autómato
Determinista Reactivo.
Represente o autómato em causa numa BC em Prolog.