Relaciones familiares en prolog
germà= hermano
germana=hermana
home=hombre
avis=abuelos
avi=abuelo
àvia=abuela
dona=mujer
avantpassat=antepasado
oncle=tio
nebot=sobrino
neboda=sobrina
% Author: Oscar Martinez
% Date: 31/03/2005
% Last Modified: 09/04/2005
% té alguns errors
% -- FETS--
%Unari - Propietat
% home(x) = x es home
home(oscar).
home(pere).
home(robert).
home(paco).
home(artur).
% dona(x) = x es dona
dona(eulalia).
dona(carol).
dona(maria).
dona(frida).
dona(carme).
dona(ivon).
%Binari - Relacions
% progenitor(x,y) = x es progenitor de y //progenitor = pare o mare.*
progenitor(pere,oscar).
progenitor(pere,maria).
progenitor(eulalia,oscar).
progenitor(eulalia,maria).
progenitor(robert,frida).
progenitor(carol,frida).
progenitor(paco, eulalia).
progenitor(carme,eulalia).
progenitor(paco, robert).
progenitor(carme,robert).
progenitor(paco, ivon).
progenitor(carme,ivon).
%casat(x,y) = x casat amb y)
casat(pere, eulalia).
casat(robert,carol).
casat(paco,carme).
casat(artur,ivon).
% -- FI FETS --
% -- REGLES --
%Binari - Relacions
%casats(X,Y)
casats(X,Y):- casat(X,Y).
casats(X,Y):- casat(Y,X).
%germa(x,y) = x es germa de y
%germa(X,Y):- progenitor(Z,Y), progenitor(Z,X),home(Z), home(X), Y\==X.
germa(X,Y):- home(X),pare(Z,Y),mare(W,Y),mare(W,X),pare(Z,X),Y\==X.
%germana(x,y) = x es germana de y
%germana(X,Y):- progenitor(Z,Y), progenitor(Z,X),home(Z), dona(X), Y\==X.
germana(X,Y):- dona(X),pare(Z,Y),mare(W,Y),mare(W,X),pare(Z,X),Y\==X.
%avi(x,y) = x es avi de y
avi(X,Y):- progenitor(Z,Y), progenitor(X,Z), home(X).
%àvia(x,y) = x es avia de y
avia(X,Y):- progenitor(Z,Y), progenitor(X,Z), dona(X).
%oncle(x,y) = x oncle de y //oncle = germa del pare o de la mare.*
oncle(X,Y):- progenitor(Z,Y), germa(X,Z).
oncle(X,Y):- progenitor(Z,Y), germana(X,Z).
%encara que també a qui està casat amb una germà o germana del pare o mare
%és a dir el cònjugue@ del germà o germana del progenitor
oncle(X,Y):- progenitor(Z,Y), germa(W,Z), casats(X,W).
oncle(X,Y):- progenitor(Z,Y), germana(W,Z), casats(X,W).
%cunyat(x,y) = x cunyat de y
%1 // Persona casada amb el germà o la germana d'algú.*
cunyat(X,Y):- germa(Y,Z), casats(X,Z), home(X).
cunyat(X,Y):- germana(Y,Z), casats(X,Z), home(X).
%2 // Germà o germana del cònjuge.*
cunyat(X,Y):- germa(X,Z), casats(Z,Y), home(X).
cunyat(X,Y):- germana(X,Z), casats(Z,Y), home(X).
%cunyada(x,y) = x cunyada de y
cunyat(X,Y):- germa(Y,Z), casats(X,Z), dona(X).
cunyat(X,Y):- germana(Y,Z), casats(X,Z), dona(X).
%2 // Germà o germana del cònjuge.*
cunyat(X,Y):- germa(X,Z), casats(Z,Y), dona(X).
cunyat(X,Y):- germana(X,Z), casats(Z,Y), dona(X).
%fill(x,y) = x es fill de y
fill(X,Y):- progenitor(Y,X), home(X).
%filla(x,y) = x es filla de y
filla(X,Y):- progenitor(Y,X), dona(X).
%pare(x,y) = x es pare de y
pare(X,Y):-progenitor(X,Y),home(X).
%mare(x,y) = x es mare de y
mare(X,Y):-progenitor(X,Y),dona(X).
%germans(x,y) = x i y son germans
germans(X,Y):-germa(X,Y),germa(Y,X),X\==Y.
germans(X,Y):-germana(X,Y),germana(Y,X),X\==Y.
germans(X,Y):-germa(X,Y),germana(Y,X),X\==Y.
germans(X,Y):-germana(X,Y),germa(Y,X),X\==Y.
%nebot(x,y) = x es nebot de y
nebot(X,Y):-oncle(Y,X),home(X).
%neboda(x,y) = x es neboda de y
neboda(X,Y):-oncle(Y,X),dona(X).
%avantpassat(x,y)
avantpassat(X,Y):-progenitor(X,Y). %cas senzill
avantpassat(X,Y):-progenitor(X,Z), avantpassat(Z,Y). %cas recursiu: es progenitor de progenitor de ... de y
%descendent(x,y) = x es descendent de y
descendent(X,Y):- avantpassat(Y,X).
%Ternaris - Relacions entre tres arguments
%avis(x,y,z) = x i y son avis de z
avis(X,Y,Z):-avi(X,Z),avia(Y,Z).
%avantcomu(x,y,z) = x avantpassat comu de y i z
avantcomu(X,Y,Z):- avantpassat(X,Y),avantpassat(X,Z), Y\==Z.
% -- FI REGLES --
% * Gran diccionari de la llengua catalana