Upload
elmo-edwards
View
62
Download
7
Embed Size (px)
DESCRIPTION
Introdución a PROLOG. Jorge Cabrera Gámez Departamento de Informática y Sistemas Universidad de Las Palmas de Gran Canaria. ¿Qué es Prolog?. Prolog = PROgramming in LOGic. Desarrollado a partir de trabajos en demostración automática de teoremas - PowerPoint PPT Presentation
Citation preview
Prolog 1
Introdución a
PROLOG
Jorge Cabrera GámezDepartamento de Informática y Sistemas
Universidad de Las Palmas de Gran Canaria
Prolog 2
¿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 3
¿Qué es Prolog?
Lenguaje de Programación
Computación simbólica y no-numérica
Para resolver problemas que involucran
• OBJETOS
• RELACIONES
Prolog 4
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 5
Hechos
“Raquel es hija de teresa”hija ( raquel, teresa).
Objetos: raquel, teresa.Relación: hija
Observar:
• Minúsculas• El punto final
Prolog 6
Ejemplo:pedro maria
teresa elena
jorge raquel
miguel
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
progenitor (raquel, miguel).
cláusulas
Prolog 7
?- progenitor (teresa, raquel).Yes
pedro maria
teresa elena
jorge raquel
miguel
?- progenitor (jorge, miguel).No
?- progenitor (X, raquel).X = teresa ;No
?- progenitor (teresa, Y).Y = jorge ;Y = raquel ;No
Prolog 8
?- progenitor (X, Y).X = pedroY = teresa ;X = mariaY = teresa ;X = mariaY = elena ;X = teresaY = jorge ;X = teresaY = raquel ;X = raquelY = miguel ;No
pedro maria
teresa elena
jorge raquel
miguel
Prolog 9
?- progenitor (PoM, jorge), progenitor (Abuelo, PoM).
PoM = teresaAbuelo = pedro ;
PoM = teresaAbuelo = maria ;
No
pedro maria
teresa elena
jorge raquel
miguel
¿Quién es abuelo de jorge?
Prolog 10
?- progenitor (pedro, Hijo), progenitor (Hijo, Nieto).
Hijo = teresaNieto = jorge ;
Hijo = teresaNieto = raquel ;
No
pedro maria
teresa elena
jorge raquel
miguel
¿Quién es nieto de pedro?
Prolog 11
?- progenitor (X, jorge), progenitor (Y, X).
X = teresaY = pedro ;
X = teresaY = maria ;
No
pedro maria
teresa elena
jorge raquel
miguel
¿Quién es abuelo de jorge?
Prolog 12
?-
¿Quién es abuelo de jorge?
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
progenitor (raquel, miguel).
La base de hechos
progenitor (Y, X).
X = teresa
Paso 1.
progenitor (Y, teresa).progenitor (X, jorge),
Prolog 13
?-
¿Quién es abuelo de jorge?
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
progenitor (raquel, miguel).
La base de hechos
progenitor (X, jorge),
Y = pedro
progenitor (Y, teresa).
X = teresa, Y = pedro
Respuesta
Paso 2.
Prolog 14
?-
¿Quién es abuelo de jorge?
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
progenitor (raquel, miguel).
La base de hechos
progenitor (X, jorge),
Y = maria
progenitor (Y, teresa).
X = teresa, Y = maria
Respuesta
Paso 3.
Prolog 15
?-
¿Quién es abuelo de jorge?
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
progenitor (raquel, miguel).
La base de hechos
progenitor (X, jorge), progenitor (Y, teresa).
Paso 4.
Backtrack
progenitor (Y, X).progenitor (X, jorge),
Prolog 16
?-
¿Quién es abuelo de jorge?
progenitor (pedro, teresa).
progenitor (maria, teresa).
progenitor (maria, elena).
progenitor (teresa, jorge).
progenitor (teresa, raquel).
progenitor (raquel, miguel).
La base de hechos
Paso 5.
No
progenitor (Y, X).progenitor (X, jorge),
Aquí
Prolog 17
Reglas
descendiente(X,Y) :- progenitor(Y,X).
Para todos X e Y,
X es descendiente de Y SI
Y es progenitor de X.
Para todos X e Y,
SI Y es progenitor de X
Entonces X es descendiente de Y.
X
Y
progenitor descendiente
cabeza cuerpo
Prolog 18
Ejemplo: la relación madre
madre (X, W) :-
progenitor(X, W),
mujer(X).
Para todos X y W,
X es madre de W SI
X es progenitor de W Y
X es mujer
La coma significaconjunción (Y)
X
W
progenitor
mujer
madre
Relación unaria
Prolog 19
Ejemplo: la relación abuelo
abuelo (X, Z) :-
progenitor (X, W),
progenitor (W, Z),
hombre (X).
Para todos X y Z,
X es abuelo de Z SI
X es progenitor de W y
W es progenitor de Z y
X es hombre
X
W
progenitor
hombre
abuelo
Z
progenitor
Prolog 20
Ejemplo: la relación hermana
hermana (X, W) :-
progenitor(Z, X), progenitor(Z, W),
mujer(X).
Para todos X y W,
X es hermana de W SI
Z es progenitor de X y W, y
X es mujer
Z
X W
progenitorprogenitor
hermanamujer
Prolog 21
pedro maria
teresa elena
jorge raquel
miguel
?- hermana(X, jorge).X = raquel ;No
¿Quién es hermana de jorge?
hombre(pedro).mujer(maria).mujer(elena).mujer(teresa).hombre(jorge).mujer(raquel).hombre(miguel).
Añadimos estos hechos.
Prolog 22
pedro maria
teresa elena
jorge raquel
miguel
?- hermana(X, teresa).X = teresa ;X = teresa ;X = elena ;No
¿Quién es hermana de teresa?
Un pequeño problema ...
Prolog 23
pedro maria
teresa elena
jorge raquel
miguel
Programa:progenitor(pedro, teresa).progenitor(maria, teresa).progenitor(maria, elena).progenitor(teresa, jorge).progenitor(teresa, raquel).progenitor(raquel, miguel).
hombre(pedro).mujer(maria).mujer(elena).mujer(teresa).hombre(jorge).mujer(raquel).hombre(miguel).
hermana(X, W) :- progenitor(Z, X), progenitor(Z, W), mujer(X).
¿Sería más eficiente intercambiar el orden de los dospredicados progenitor/2 en la definición de hermana/2 ?
Prolog 24
Ejemplo: la relación antepasado
antepasado (X, Z) :-
progenitor (X, W),
antepasado (W, Z).
Para todos X y Z,
X es antepasado de Z SI
X es progenitor de W y
W es antepasado de Z y
X
W
progenitor
antepasado
Z
antepasado
Una definición recursiva
...
Prolog 25
Ejemplo: la relación antepasado
antepasado (X, Z) :-
progenitor (X, W),
antepasado (W, Z).
X
W
progenitor
antepasado
Z
antepasado
...
?- antepasado(X, jorge).No
Prolog 26
Ejemplo: la relación antepasado
antepasado (X, Z) :-
progenitor (X,
W),
antepasado (W,
Z).
X
W
progenitor
antepasado
Z
antepasado
...
?- antepasado(X, jorge).X = teresa ;X = pedro ;X = maria ;No
antepasado(X, Z) :- progenitor(X, Z).
Prolog 27
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 28
Ejercicio
Definir las
relaciones tia, tio,
sobrino, sobrina,
primos, ...
y ensayarla sobre
la base de datos
de la figura
pedro maria
teresa elena
jorge raquel
miguel
jose
juan
SWI-Prolog