Ej09.pro



/**********************************************************/
/*                                                        */
/*               Inteligencia Artificial                  */
/*  Universidad de Alicante                               */
/*                                                        */
/*                LOGICA DE PRIMER ORDEN                  */
/*                       Prolog                           */
/*                                                        */
/*                                                        */
/*       S.O.       :  MS-DOS (Windows)                   */
/*       Interprete :  SWI-Prolog                         */
/*       Fichero    :  EJ09.PL                            */
/*                                                        */
/**********************************************************/


           nl,nl.



/*----             PROGRAMA PRINCIPAL                 ----*/

/*------ Hechos ------*/

/* padres(H,P,M,A) <- H tiene como padre a P y como madre
padres('Don Jose',p1,m1,1893).
padres('Antonia',p3,m3,1929).
padres('Luis',p4,m4,1931).
padres('Jose Antonio','Jose','Antonia',1949).
padres('Pepe','Jose','Antonia',1953).
padres('Rosa',p5,m5,1955).
padres('Jose Luis','Luis','Maria Jose',1961).
padres('Maria Luisa','Luis','Maria Jose',1966).
padres('Pepito','Pepe','Rosa',1985).

casados('Jose','Antonia').
casados('Luis','Maria Jose').
casados('Pepe','Rosa').

hombre('Don Jose').
hombre('Jose').
hombre('Luis').
hombre('Jose Antonio').
hombre('Pepe').
hombre('Jose Luis').
hombre('Pepito').

mujer('Antonia').
mujer('Maria').
mujer('Maria Jose').
mujer('Rosa').
mujer('Maria Luisa').


/*------ Reglas ------*/

edad(P,E) :- padres(P,_,_,A),
             E is 1998-A.


/* mayor(P1,P2) <- la persona P1 es mayor que P2 */
mayor(P1,P2) :- padres(P1,_,_,A1),
                padres(P2,_,_,A2),
                A1<A2.


ninyo(P) :- edad(P,E),
            E=<14.


joven(P) :- edad(P,E),
            14<E,E=<25.


adulto(P) :- edad(P,E),
             25<E,E=<50.


viejo(P) :- edad(P,E),
            E>50.


/* hermanos(H1,H2) <- H1 es hermano/a de H2 */
hermanos(H1,H2) :- padres(H1,P,M,_),
                   padres(H2,P,M,_),
                   H1\=H2.


/* tio(T,S) <- T es el tio de S */
tio(T,S) :- hombre(T),
            padres(S,P,_,_),
            hermanos(T,P).
tio(T,S) :- hombre(T),
            padres(S,_,M,_),
            hermanos(T,M).
tio(T,S) :- hombre(T),
            padres(S,P,_,_),
            hermanos(T1,P),
            casados(T,T1).
tio(T,S) :- hombre(T),
            padres(S,_,M,_),
            hermanos(T1,M),
            casados(T,T1).


/* tia(T,S) <- T es la tia de S */
tia(T,S) :- mujer(T),
            padres(S,P,_,_),
            hermanos(T,P).
tia(T,S) :- mujer(T),
            padres(S,_,M,_),
            hermanos(T,M).
tia(T,S) :- mujer(T),
            padres(S,P,_,_),
            hermanos(T1,P),
            casados(T1,T).
tia(T,S) :- mujer(T),
            padres(S,_,M,_),
            hermanos(T1,M),
            casados(T1,T).


/* primos(P1,P2) <- P1 es primo/a de P2 */
primos(P1,P2) :- padres(P1,PA1,MA1,_),
                 padres(P2,PA2,MA2,_),
                 (hermanos(PA1,PA2);
                  hermanos(PA1,MA2);
                  hermanos(MA1,PA2);
                  hermanos(MA1,MA2)).


/* abuelo(A,N) <- A es el abuelo de N */
abuelo(A,N) :- padres(N,P,M,_),
               (padres(P,A,_,_);
                padres(M,A,_,_)).


/* abuela(A,N) <- A es la abuela de N */
abuela(A,N) :- padres(N,P,M,_),
               (padres(P,_,A,_);
                padres(M,_,A,_)).


/* antepasado(A,P) <- A es antepasado de P */
antepasado(A,P) :- padres(P,A,_,_).
antepasado(A,P) :- padres(P,_,A,_).
antepasado(A,P) :- padres(P,PA,_,_),
                   antepasado(A,PA).
antepasado(A,P) :- padres(P,_,MA,_),
                   antepasado(A,MA).


:- mensaje.