sábado, 22 de junio de 2013

Capitulo 4 (Ejercicios 4.1)

Ejercicios.
Escribir preguntas para encontrar lo siguiente: 
a). Nombres de las familias que no tienen hijos. 
b). Nombres de todos los hijos que no trabajan. 
c). Nombres de las familias con esposas que trabajan y esposos que no trabajan. 
d). Todos los hijos cuyos padres difieren en edad con al menos 10 años. 
e). Definir la relación: gemelos(Hijo1, Hijo2) que sirva para encontrar geme-los en la 
base de datos.
Una base de datos se puede representar en Prolog como un conjunto de hechos. Por 
ejemplo, una base de datos acerca de familias: cada familia se representa con una sola 
cláusula y tiene tres componentes: Esposo, Esposa e Hijos. El número de hijos es variable 
y se debe representar con una lista. A su vez cada persona (esposo, esposa ó hijo) tiene 
cuatro componentes: nombre, apellido, fecha de nacimiento y trabajo : 
familia( 
 persona(juan,perez,fecha(7,mayo,1950),trabaja(uag,2000)), 
 persona(ana,flores,fecha(9,mayo,1951),no_trabaja), 
 [persona(jose,perez,fecha(5,mayo,1973),no_trabaja), 
 persona(susana,perez,fecha(5,junio,1975),no_trabaja) 
 ]). 
familia( 
 persona(jorge,flores,fecha(21,abril,1953),trabaja(uag,2500)), 
 persona(edith,juarez,fecha(5,enero,1960),no_trabaja), 
 [persona(pedro,flores,fecha(1,julio,1980),no_trabaja) 
 ]). 
...
Una vez definida la base de datos, es posible ir adicionando procedimientos que hagan 
más práctica la interacción con ella : 
% X es esposo. 
esposo(X) :- familia(X,_,_). 
% X es esposa. 
esposa(X) :- familia(_,X,_). 
% X es hijo. 
hijo(X) :- familia(_,_,Hijos), miembro(X,Hijos). 
miembro(X, [X|L]). 
miembro(X, [Y|L]) :- miembro(X, L).

familia(
persona(jorge,jaimes,fecha(09,mayo,1991),no_trabaja), % esposo
%, esposa
[ %, hijos.

familia(
persona(gustavo,jaimes,fecha(23,abril,1964),trabaja(comerciante,3000)),
persona(isabel,moyao,fecha(08,julio,1972),trabaja(empleada,3000)),
[ persona(orquidea,jaimes,fecha(21
,agosto,1989),trabaja(comerciante,2000)) ]
).
 % Asi definiremos quien es esposo: Y es esposo.
esposo(Y) :- familia(Y,_,_).
 % Asi definiremos quien es esposa: X es esposa.
esposa(X) :- familia(_,X,_).
 % Asi definiremos quien es hijo: 
hijo(Z) :- familia(_,_,Hijos), miembro(Z,Hijos).
miembro(X, [X|_]). % Asi utilizaremos esta operacion para enlistar a todos los Hijos.
miembro(X, [_|L]) :- miembro(X, L).
% Asi podremos saber si hay una persona en la base de datos.
existe(Persona) :- esposo(Persona); esposa(Persona); hijo(Persona).
% Con este por fecha de nacimiento.
fecha_nacimiento(persona(_,_,Fecha,_), Fecha).
% Con esta el salario de una persona.
salario(persona(_,_,_,trabaja(_,S)),S).
salario(persona(_,_,_,no_trabaja),0).
% Con este ultimo el ingreso total de la familia.

total([],0). 
total([Persona|Lista],Suma) :- salario(Persona,S), 
 total(Lista,Resto), Suma is S + Resto. 











No hay comentarios:

Publicar un comentario