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:
CASAL <cod> (Codmul,Codmar,data)
FILHOS <(CodF1,Data1),...>