Está en la página 1de 3

Ejercicios prcticos

Base de Datos. Ejemplo 1.1

Ejercicio 1 Dada la base de datos familiar del ejemplo 1.1, se pide la respuesta de PROLOG y el enunciado verbal de las siguientes preguntas: a) ?-progenitor(jaime,X). b) ?-progenitor(X,jaime). c) ?-progenitor(clara,X), progenitor(X,patricia). d) ?-progenitor(tomas,X), progenitor(X,Y), progenitor(Y,Z). Ejercicio 2 Dada la base de datos familiar del ejemplo 1.1, formula en PROLOG las siguientes preguntas: a) Quin es el progenitor de Patricia? b) Tiene Isabel un hijo o una hija? c) Quin es el abuelo de Isabel? d) Cules son los tos de Patricia? (no excluir al padre)

Ejercicio 3 Dada la base de datos familiar del ejemplo 1.1, y suponiendo definidas las siguientes clusulas: hombre(X). mujer(X). progenitor(X,Y). dif(X,Y):- X\=Y. Donde las 3 primeras clusulas se definirn como hechos (por tanto no se podr poner una variable como argumento, ya que una variable hara que el hecho fuera cierto para cualquier objeto) y la ltima como una regla (donde el smbolo \= significa distinto). Escribir las reglas de PROLOG que expresen las siguientes relaciones: a) es_madre(X). b) es_padre(X). c) es_hijo(X). d) hermana_de(X,Y). e) abuelo_de(X,Y) y abuela_de(X,Y). f) hermanos(X,Y). Tened en cuenta que una persona no es hermano de s mismo. g) tia(X,Y). Excluid a los padres. Ejemplo 1.3 predecesor(X,Y):-progenitor(X,Y). predecesor(X,Y):-progenitor(X,Z), predecesor(Z,Y). La primera definicin de predecesor corresponde al caso ms sencillo en el que el predecesor corresponde al progenitor. Es lo que llamaremos la regla de salida de la recursividad. Si al intentar comprobar si una persona es predecesora de otra, se halla en la base de datos que la primera persona es progenitora de la segunda, se habr demostrado y PROLOG responder que s. En caso contrario, se intentar demostrar que es predecesor utilizando la segunda regla, que contiene la llamada recursiva.
X Z Y Figura 1.1 Diagrama que explica la definicin de predecesor. La lnea

continua se refiere a un progenitor directo y la discontinua a un predecesor.

Ejemplo 1.3 predecesor(X,Y):-progenitor(X,Y). predecesor(X,Y):-progenitor(X,Z), predecesor(Z,Y). La primera definicin de predecesor corresponde al caso ms sencillo en el que el predecesor corresponde al progenitor. Es lo que llamaremos la regla de salida de la recursividad. Si al intentar comprobar si una persona es predecesora de otra, se halla en la base de datos que la primera persona es progenitora de la segunda, se habr demostrado y PROLOG responder que s. En caso contrario, se intentar demostrar que es predecesor utilizando la segunda regla, que contiene la llamada recursiva. Ejercicio 1.4 Dada la base de datos familiar del ejemplo 1.1: a) Define una regla que permita obtener los sucesores de una persona. b) Comprueba el funcionamiento de PROLOG para obtener los sucesores de Clara. Escribir el rbol de derivacin natural. c) Es una alternativa vlida a la definicin de predecesor la siguiente? predecesor(X,Z):-progenitor(X,Z). predecesor(X,Z):- progenitor(Y,Z), predecesor(X,Y). Dibuja un diagrama que explique la definicin. Ejemplo 1.5 fecha(D,M,1998) = fecha(D1,mayo,A) piloto(A,Londres) = piloto(londres,paris) punto(X,Y,Z) = punto(X1,Y1,Z1) f(X,a(b,c)) = f(Z,a(Z,c))

Ejemplo 1.5 fecha(D,M,1998) = fecha(D1,mayo,A) piloto(A,Londres) = piloto(londres,paris) punto(X,Y,Z) = punto(X1,Y1,Z1) f(X,a(b,c)) = f(Z,a(Z,c)) Ejercicio 1.5 Decir si la unificacin tiene xito y cul es el resultado de la instanciacin de las variables en: triangulo(punto(-1,0),P2,P3) = triangulo(P1,punto(1,0),punto(0,Y)). A qu familia de tringulos da lugar la instanciacin resultante? Ejercicio 1.6 Con la siguiente definicin de segmento: segmento(punto(X1,Y1),punto(X2,Y2)). Representar cualquier segmento lnea vertical con X=5. Ejercicio 1.7 Si representamos el rectngulo por rectngulo(P1,P2,P3,P4) donde Pi son vrtices ordenados positivamente, define la relacin regular(R) que ser verdadero cuando los lados del rectngulo R sean verticales y horizontales. Ejercicio 1.8 Dado el siguiente programa: f(1,uno). f(s(1),dos). f(s(s(1)),tres). f(s(s(s(X))),N):- f(X,N). Cmo se comporta PROLOG ante las siguientes preguntas? a) ?-f(s(1),A). b) ?-f(s(s(1)),dos). c) ?-f(s(s(s(s(s(s(1)))))),C). d) ?-f(D,tres). Ejercicio 1.9 Dada la siguiente base de datos familiar:
Fundamentos de PROLOG

18 progenitor(clara,jose). progenitor(tomas, jose). progenitor(tomas,isabel). progenitor(jose, ana). progenitor(jose, patricia). progenitor(patricia,jaime). mujer(clara). mujer(isabel). mujer(ana). mujer(patricia). hermana_de(X,Y):- mujer(X), progenitor(Z,X), progenitor(Z,Y). tia(X,Y):- hermana_de(X,Z), progenitor(Z,Y). Construir el esquema de deduccin natural para las siguientes preguntas: a) ?-tia(isabel,ana). b) ?-tia(clara,ana). c) Si aado la clusula progenitor(tomas, maria), cmo quedaran a) y b) si pulsamos ;? Ejercicio 1.10 Construir el rbol de resolucin lineal para la pregunta: ?-predecesor(clara,patricia). teniendo en cuenta las siguientes 4 definiciones de predecesor: a) predecesor(X,Y):-progenitor(X,Y). predecesor(X,Y):-progenitor(X,Z), predecesor(Z,Y). b) predecesor(X,Y):-progenitor(X,Z), predecesor(Z,Y). predecesor(X,Y):-progenitor(X,Y). c) predecesor(X,Y):-progenitor(X,Y). predecesor(X,Y):-predecesor(Z,Y), progenitor(X,Z). d) predecesor(X,Y):-predecesor(Z,Y), progenitor(X,Z). predecesor(X,Y):-progenitor(X,Y).

También podría gustarte