Supongamos que una base de datos sobre relaciones familiares se

advertisement
Supongamos que una base de datos sobre relaciones familiares se compone de
un conjunto de hechos que declaran a los miembros familiares conocidos en base
a su sexo y sus progenitores. Por ejemplo:
progenitor(pablo, juan). % “pablo es el progenitor de juan”
progenitor(maría, juan).
hombre(pablo).
hombre(juan).
mujer(maría).
...
Además, la base de datos contiene reglas que definen ciertas relaciones
familiares, como la relación abuelo/2:
abuelo(X,Y):% "X es el abuelo de Y"
progenitor(X,Z),
progenitor(Z,Y),
hombre(X).
A. Definir el predicado comprobar_sujetos/1 que permita verificar que los
sujetos que intervienen en una relación de parentesco son conocidos. El
argumento debe ser un functor de la relación donde sus argumentos
representan a los sujetos. Por ejemplo:
?- comprobar_sujetos(abuelo(luis, juan)).
debería fallar, indicando la causa, si alguno de los sujetos no está
completamente definido.
B. Definir el predicado definido(Cabeza, Cuerpo), tal que compruebe si una
determinada relación de parentesco es conocida, p.e. cuando cabeza es
tia(X,pedro), y que devuelva en Cuerpo el cuerpo de la definición de la
regla. Cuando la regla no se haya definido, debe fallar alertando de este
extremo.
C. Encontrar una definición del predicado inspecciona(Termino,
NVarLibres, Aridad) de manera que siendo el primer argumento un
término compuesto, básicamente un functor con argumentos, lo analice y
devuelva el número de variables libres y su aridad.
D. Definir el predicado ordena_premisas(Lista_P1, Lista_P_Ordenada),
tal que dada una lista de premisas como primer argumento, devuelva la misma
lista de premisas, pero ordenadas según un criterio que sitúe en primer lugar
las premisas más restrictivas. Un criterio podría basarse en considerar como
más restrictivas aquellas premisas que involucren predicados con mayor
número de variables instanciadas y mayor aridad.
E. Dada la lista de variables VarNL y el functor con argumentos Premisa, definir
el predicado insertaVarNL(Premisa, VarNL, NvarNL), tal que se
devuelva en NvarNL una lista que contendrá la unión de la variables de la lista
original con aquellas contenidas en el functor como argumentos.
Descargar