Introdución a PROLOG Jorge Cabrera Gámez Departamento de Informática y Sistemas

Download Report

Transcript Introdución a PROLOG Jorge Cabrera Gámez Departamento de Informática y Sistemas

Introdución a
PROLOG
Jorge Cabrera Gámez
Departamento de Informática y Sistemas
Universidad de Las Palmas de Gran Canaria
Prolog
1
¿Qué es Prolog?
• Prolog = PROgramming in LOGic.
• Desarrollado a partir de trabajos en demostración
automática de teoremas
• Aplicado inicialmente en problemas de Procesamiento
del Lenguaje Natural
• Permite un prototipado más rápido que con muchos
lenguajes porque es mucho más proximo a la
especificación lógica del programa.
Prolog
2
¿Qué es Prolog?
Lenguaje de Programación
Computación simbólica y no-numérica
Para resolver problemas que involucran
• OBJETOS
• RELACIONES
Prolog
3
Para programar en Prolog:
Declarar hechos sobre objetos y sus relaciones
Declarar reglas sobre los objetos y sus relaciones
Hacer preguntas sobre los objetos y sus relaciones
Prolog
4
Hechos
“Raquel es hija de teresa”
hija ( raquel, teresa).
Objetos: raquel, teresa.
Relación: hija
Observar:
• Minúsculas
• El punto final
Prolog
5
pedro
Ejemplo:
maria
progenitor (pedro, teresa).
progenitor (maria, teresa).
teresa
elena
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
jorge
raquel
progenitor (raquel, miguel).
cláusulas
Prolog
miguel
6
?- progenitor (teresa, raquel).
Yes
pedro
?- progenitor (jorge, miguel).
No
maria
teresa
elena
?- progenitor (X, raquel).
X = teresa ;
No
?- progenitor (teresa, Y).
Y = jorge ;
Y = raquel ;
No
Prolog
jorge
raquel
miguel
7
?- progenitor (X, Y).
X = pedro
Y = teresa ;
X = maria
Y = teresa ;
X = maria
Y = elena ;
X = teresa
Y = jorge ;
X = teresa
Y = raquel ;
X = raquel
Y = miguel ;
No
Prolog
pedro
maria
teresa
jorge
elena
raquel
miguel
8
¿Quién es abuelo de jorge?
pedro
?- progenitor (PoM, jorge),
progenitor (Abuelo, PoM).
maria
teresa
elena
PoM = teresa
Abuelo = pedro ;
PoM = teresa
Abuelo = maria ;
No
Prolog
jorge
raquel
miguel
9
¿Quién es nieto de pedro?
pedro
?- progenitor (pedro, Hijo),
progenitor (Hijo, Nieto).
maria
teresa
elena
Hijo = teresa
Nieto = jorge ;
Hijo = teresa
Nieto = raquel ;
No
Prolog
jorge
raquel
miguel
10
¿Quién es abuelo de jorge?
pedro
?- progenitor (X, jorge),
progenitor (Y, X).
maria
teresa
elena
X = teresa
Y = pedro ;
X = teresa
Y = maria ;
No
Prolog
jorge
raquel
miguel
11
Paso 1.
¿Quién es abuelo de jorge?
?- progenitor (X, jorge),
progenitor (Y, X).
teresa).
progenitor (pedro, teresa).
progenitor (maria, teresa).
X = teresa
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
progenitor (raquel, miguel).
Prolog
La base de hechos
12
Paso 2.
¿Quién es abuelo de jorge?
?- progenitor (X, jorge),
Y = pedro
progenitor (Y, teresa).
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
Respuesta
X = teresa, Y = pedro
Prolog
progenitor (teresa, raquel).
progenitor (raquel, miguel).
La base de hechos
13
Paso 3.
¿Quién es abuelo de jorge?
?- progenitor (X, jorge),
progenitor (Y, teresa).
progenitor (pedro, teresa).
Y = maria
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
Respuesta
X = teresa, Y = maria
Prolog
progenitor (teresa, raquel).
progenitor (raquel, miguel).
La base de hechos
14
Paso 4.
¿Quién es abuelo de jorge?
?- progenitor (X, jorge),
progenitor (Y, X).
teresa).
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
Backtrack
Prolog
progenitor (raquel, miguel).
La base de hechos
15
Paso 5.
¿Quién es abuelo de jorge?
?- progenitor (X, jorge), progenitor (Y, X).
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
Aquí
progenitor (teresa, jorge).
progenitor (teresa, raquel).
No
Prolog
progenitor (raquel, miguel).
La base de hechos
16
Reglas
X
Para todos X e Y,
X es descendiente de Y SI
Y es progenitor de X.
progenitor
descendiente(X,Y) :- progenitor(Y,X).
cabeza
Para todos X e Y,
descendiente
Y
cuerpo
SI Y es progenitor de X
Entonces X es descendiente de Y.
Prolog
17
Ejemplo: la relación madre
Para todos X y W,
mujer
X es madre de W SI
X es progenitor de W Y
X es mujer
madre (X, W) :-
X
madre
progenitor
W
progenitor(X, W),
mujer(X).
Relación unaria
Prolog
La coma significa
conjunción (Y)
18
Ejemplo: la relación abuelo
Para todos X y Z,
hombre
X
X es abuelo de Z SI
X es progenitor de W y
progenitor
W es progenitor de Z y
W
X es hombre
abuelo (X, Z) :progenitor (X, W),
progenitor (W, Z),
hombre (X).
Prolog
abuelo
progenitor
Z
19
Ejemplo: la relación hermana
Para todos X y W,
X es hermana de W SI
Z
progenitor
progenitor
Z es progenitor de X y W, y
X es mujer
hermana (X, W) :-
X
mujer
W
hermana
progenitor(Z, X), progenitor(Z, W),
mujer(X).
Prolog
20
Añadimos estos hechos.
pedro
hombre(pedro).
mujer(maria).
mujer(elena).
mujer(teresa).
hombre(jorge).
mujer(raquel).
hombre(miguel).
¿Quién es hermana de jorge?
?- hermana(X, jorge).
X = raquel ;
No
Prolog
maria
teresa
jorge
elena
raquel
miguel
21
Un pequeño problema ...
pedro
maria
¿Quién es hermana de teresa?
?- hermana(X, teresa).
X = teresa ;
X = teresa ;
X = elena ;
No
teresa
jorge
elena
raquel
miguel
Prolog
22
Programa:
pedro
progenitor(pedro, teresa).
progenitor(maria, teresa).
progenitor(maria, elena).
progenitor(teresa, jorge).
progenitor(teresa, raquel).
progenitor(raquel, miguel).
teresa
hombre(pedro).
mujer(maria).
mujer(elena).
mujer(teresa).
hombre(jorge).
mujer(raquel).
hombre(miguel).
jorge
hermana(X, W) :progenitor(Z, X), progenitor(Z, W),
mujer(X).
Prolog
maria
elena
raquel
miguel
¿Sería más eficiente intercambiar el orden de los dos
23
predicados progenitor/2 en la definición de hermana/2 ?
Ejemplo: la relación antepasado
X
progenitor
Para todos X y Z,
X es antepasado de Z SI
antepasado
W
X es progenitor de W y
W es antepasado de Z y
antepasado (X, Z) :progenitor (X, W),
antepasado
antepasado (W, Z).
Una definición recursiva
Prolog
...
Z
24
Ejemplo: la relación antepasado
?- antepasado(X, jorge).
No
X
progenitor
antepasado
W
antepasado (X, Z) :progenitor (X, W),
antepasado (W, Z).
Prolog
antepasado
...
Z
25
Ejemplo: la relación antepasado
?- antepasado(X, jorge).
X = teresa ;
X = pedro ;
X = maria ;
No
antepasado(X, Z) :progenitor(X, Z).
antepasado (X, Z) :-
progenitor (X, W),
X
progenitor
antepasado
W
antepasado
...
antepasado (W, Z).
Prolog
Z
26
Sumario
• Declarar hechos relativos a objetos
• Plantear preguntas sobre los hechos
• Utilizar variables
• Utilizar la conjunción
• Definir relaciones mediante reglas
• Un rápido vistazo al mecanismo de backtracking
Prolog
27
pedro
maria
Ejercicio
Definir las relaciones
tia, tio, sobrino,
teresa
elena
juan
sobrina, primos, ...
y ensayarla sobre
jorge
raquel
jose
la base de datos
de la figura
SWI-Prolog
Prolog
miguel
28