Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Laboratorio 1 de Win Prolog
Laboratorio 1 de Win Prolog
Aquí, el nombre de la relación es: padre_de, juan y maría son sus argumentos. Note que el
nombre de la relación y los argumentos están escritos con letra minúscula. Escriba un programa
Prolog para el conjunto familia de la gráfica.
jua ines
n
luis
mari
a
Arbol de Familia
hug
o
Este programa consiste de 6 cláusulas y cada una declara un hecho acerca de la relación
padre_de y cada una es una particular instancia de esa relación. Cada instancia es también
llamada relación. En general, una relación es definida como el conjunto de todas las instancias.
Cuando el problema ha sido bien comunicado al sistema Prolog, se puede hacer preguntas
acerca de la relación padre_de. Ej. es juan padre de maria?
Prolog maneja dos áreas de trabajo: El editor y la consola. El programa se escribe en el editor y
las preguntas se hacen en la consola así: ?- padre_de(juan, maría). Al ser esto un hecho en el
programa, Prolog responde: yes. Otra pregunta puede ser: ?- padre_de(luis, karem). Prolog
responde no, porque en el programa no hay mención de que luis sea padre de karem. También
responde no para al pregunta: ?- padre_de(ines, pilar). Porque el programa no ha escuchado
algo a cerca de pilar.
Se puede preguntar Quiénes son los hijos de maria: ?- padre_de(maría, Quien). Y Prolog
puede entregar más de una respuesta:
Quien = pedro. Si se desea otra respuesta, se oprime la barra espaciadora y aparece una
nueva respuesta: Quien = karem. Al requierse más soluciones Prolog responde no porque
todas las posibilidades han sido presentadas.
Finalmente, el programa puede ser definido preguntado: Encontrar X y Y, tal que X es padre de
Y. Se expresa en Prolog así: ?- padre_de(X, Y). Prolog busca y presenta las parejas padre-hijo
1
Compiló Antonio García P.
y lo hace una a una, cuando se le pida una siguiente respuesta. Es posible parar cuando así lo
deseemos oprimiendo la tecla <enter>.
Es posible realizar otras preguntas algo más complicadas como: Quién es el abuelo de José?.
Esta pregunta es hecha en dos pasos:
ines
padre_de
lui
s
padre_de
jos
e
La composición para la consulta es: Encontrar X y Y tales que satisfagan los siguientes dos
requerimientos:
?- padre_de(Y, jose), padre_de(X, Y). Se puede cambiar el orden de requerimientos: ?-
padre_de(X, Y), padre_de(Y, jose). Con igual significado lógico.
También es válida la pregunta De quién es abuelo ines o quienes son los nietos de ines?. ?-
padre_de(ines, Y), padre_de(Y, X). Las respuestas de Prolog son:
Otra pregunta es: pedro y karem tienen un padre en común? Esto puede ser expresado en dos
pasos:
1) Quién es el padre (X) de pedro?
2) Es (este mismo) X el padre de karem?, así:
?- padre_de(X, pedro), padre_de(X, karem).
La respuesta es X = ines
Ejercicio 1
1. Cómo responde Prolog las siguientes preguntas
a. ?- padre_de(hugo, X).
b. ?- padre_de(X, hugo).
c. ?- padre_de(juan, X), padre_de(X, karem).
d. ?- padre_de(juan, X), padre_de(X, Y), padre_de(Y, hugo).
2. Formule en Prolog preguntas para las siguientes relaciones
a. Quiénes son padres de karem?
b. Puede tener jose un hijo.
c. Quienes son los abuelos de karem
3. realice todo lo anterior con el árbol genealógico de su propia familia.
4. Dibuje el árbol genealógico como el de la primera grafica y aplicado a su familia.
masculino(luis).
masculino(jose).
...
Las relaciones anteriores son unarias, usadas para definir propiedades de los objetos y pueden
ser leída como: ines es femenino ó luis es masculino. Estas mismas relaciones se pueden
convertir en binarias:
sexo(ines, femenino).
sexo(ines, masculino).
...
Se introduce la relación hijo_de como inversa de la relación padre_de. Se define la nueva
relación haciendo una lista de hechos mencionando el par de personas tal que una hijo_de con
la lista de la relación padre_de. Ej. hijo_de(maria, juan). Pero puede ser definida más
elegantemente haciendo
uso del hecho de que es
la inversa de la relación X X X
padre_de que ya ha sido padre_de
hijo_de
definida. Así: padre_de
padre_de abuelo
Para todo X y Y, Y
hijo_de X si X padre_de Y Y Y
Y. padre_de
En Prolog se construye
así: hijo_de(Y, X):- Z
padre_de(X, Y). Este
tipo de cláusulas es llamado reglas. Una regla tiene una parte de condición (el lado derecho de
la regla) y una de conclusión (el lado izquierdo). La conclusión es llamada cabeza de la cláusula
y a condición es el cuerpo: hijo_de(Y, X):- padre_de(X, Y).
cabeza cuerpo
Ahora se adicionan más relaciones al programa ejemplo. La relación madre se basa en la
lógica: Paro todo X y Y, X es madre de Y si X padre_de Y y X es femenino. En Prolog se
construye así: madre(X, Y):- padre_de(X, Y), femenino(X).
Ejercicio 2
Defina nuevas reglas para relaciones como papá, tío, tía, primo, prima, hermano, hermana y
todas las de lazos familiares.
Ejercicio 3
1. Presente una nueva relación llamada sucesor(X, Z) para la relación inversa de
predecesor.
2. A partir de las anteriores relaciones, construya una relación pariente en la que se
incluyan los familiares por sucesores o predecesores y en las que se indique si hay alguna
relación de familia entre dos elementos X y Y.