Práctica Nº 1, Curso 2003/04, Fecha 5/12/2003

1. progenitor

El siguiente fragmento incluye un conjunto de declaraciones básicas sobre una familia y una regla que indica si X es progenitor de Y



progenitor(fernando,juan).
progenitor(luisa,juan).
progenitor(luisa,maria).
progenitor(luisa,diego).
progenitor(fernando,pepe).
progenitor(pepe,pedro).
progenitor(pedro,ana).
progenitor(pedro,belen).

hombre(juan).
hombre(fernando).
hombre(pepe).
hombre(diego).
hombre(pedro).

mujer(luisa).
mujer(pepa).
mujer(belen).
mujer(ana).


Compilar el programa y realizar las siguientes consultas:




2. padre

El siguiente fragmento declara una regla que indica si X es el padre de Y



padre(X,Y):-progenitor(X,Y),hombre(X).


Declarar reglas familiares para:




3. abuelo

El siguiente fragmento declara una regla que indica si X es abuelo de Y



abuelo(X,Y):-progenitor(X,Z),progenitor(Z,Y),hombre(X).


Declarar reglas para:




4. antepasado

Definir un predicado que indique si X es un antepasado de Y




5. Ontología (Opcional)

Una ontología consiste en una serie de definiciones de conceptos sobre un determinado dominio. Por ejemplo, las reglas anteriores definirían una ontología sobre relaciones familiares. Definir una ontología sobre algún otro dominio, como clasificaciones de animales, tipos de música, equipos de fútbol, etc.




6. Números naturales

Una posible codificación de números naturales en Prolog se basa en la siguiente definición:

Las reglas anteriores se codificarían en Prolog como:



natural(0).
natural(s(X)):-natural(X).





7. suma

La suma de números naturales puede definirse con las siguientes reglas.

En Prolog, dichas reglas pueden expresarse como:



suma(0,X,X).
suma(s(X),Y,s(Z)):-suma(X,Y,Z).





8. producto

El producto de números naturales se define con las reglas:

Dichas reglas pueden expresarse en Prolog como:



producto(0,X,0).
producto(s(X),Y,R):-producto(X,Y,Z),suma(Z,Y,R).


Realizar diversas consultas para comprobar que realmente multiplica naturales




9. otros (Opcional)

Intentar definir otros predicados aritméticos como: