Up: Exercícios Previous: Exercício do Exame de

Exercício do Exame de Recurso de 1998

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