Up: Exercícios Previous:
Exercício do Exame de
Para estudos na área da demografia das populações, construiu-se uma base de
conhecimento (BC) com os dados que se poderam recolher sobre cada individuo, sobre
os casais e sobre os descendentes (note-se que tanto os membros dos casais,
como os filhos, têm de ser individuos). Para manipular essa BC foram, também,
desenvolvidos alguns predicados operacionais, tais como validaFam/1 e filho/2.
O extracto de Prolog seguinte mostra essa BC.
%indiv( C,N,LNasc,DNasc ) :- C 'e o codigo do individuo de nome N,
% nascido no local LNasc na data DNasc.
indiv( p001,joao,porto,1983 ).
indiv( p002,nuno,lisboa,1955 ).
indiv( p003,maria,braga,1956 ).
indiv( p004,joana,aveiro,1986 ).
%casal( C,CMu,CMa,D ) :-
% C 'e o codigo que identifica o casal cuja mulher
% 'e o individuo de codigo CMu, o marido 'e o individuo
% de codigo CMa, casados na data D
casal( cp001,p003,p002,1980 ).
%descendente( CC,CI) :-
% CI 'e o codigo de um individuo que 'e filho do casal CC
descendente( cp001,p001 ).
descendente( cp001,p004 ).
validaFam(Cod) :- casal(Cod, Mu, Ma, DC),
indiv(Mu, _, DNMu, _),
TolMu is DNMu+15, DC >= TolMu,
indiv(Ma, _, DNMa, _),
TolMa is DNMa+15, DC >= TolMa.
filho(F,Prog) :- indiv(CodF, F, _, _), indiv(CodP, Prog, _, _),
descendente(CodFam, CodF),
( casal(CodFam, CodP, _, _) ;
casal(CodFam, _, CodP, _)
).
Responda, então, às alíneas seguintes:
- a)
- Defina o predicado descendeDe/1, que recebe como argumento o nome de um
individuo e escreve os dados conhecidos sobre o casal de quem ele é filho(a).
- b)
- Defina o predicado numeroFilhos/2, que dá no segundo argumento o número total
de filhos do casal cujo código é passado no primeiro argumento.
- c)
- Defina o predicado nascidosEmEntre/4, que recebe o nome de um local e duas
datas (nos 3 primeiros argumentos) e dá no quarto argumento a lista de todos os
individuos nascidos nesse local, no periodo compreendido entre as duas datas
especificadas.
- d)
- Interprete o predicado validaFam/1, dizendo que lógica é que ele exprime e
indicando para que serve e como se utiliza.
- e)
- Extenda o predicado anterior, validaFam/1, para um novo predicado validaFams/0,
que aplica o primeiro a todas as famílias.
- f)
- Usando a árvore de procura, mostre a diferença entre a prova dos objectivos validaFam(cp001)
e validaFam(X).
- g)
- Recorrendo à árvore de prova, mostre que filho(joao,maria) é verdadeiro.
- h)
- Crie uma DCG para definir uma linguagem que sirva para descrever famílias de modo a
carregar automaticamente a BC a partir das frases dessa linguagem, que deverão ser do
género:
CASAL <cod> (Codmul,Codmar,data)
FILHOS <(CodF1,Data1),...>
- i)
- Acrescente à DCG da alínea os atributos e as acções semanticas necessários para
verifcar que os códigos, tanto da mulher como do marido, existam na BC como individuos.
- j)
- Com a linguagem que se lhe pediu atás só é possível extrair informação para juntar
à BC factos casal e descendente, mas não pode retirar dados para
juntar factos indiv.
Estenda, então, a gramática para que junto com a descrição dos filhos se incluam dados
suficientes para acrescentar os ditos factos indiv à BC. Acrescente acções
semanticas a essa extensão de modo a produzir mesmo esse resultado, durante o
reconhecimento das novas frases.
Up: Exercícios Previous:
Exercício do Exame de
1999-05-26