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.
blog y twitter
Hace 15 años
No hay comentarios:
Publicar un comentario