Prolog
Introducción a Prolog
Introducción
Hechos y consultas
Reglas. Recursión
Funcionamiento de prolog
Sintaxis y semántica del lenguaje
Enrique Alfonseca
(basado en el libro de Iván Bratko)
Escuela Politécnica Superior, UAM
Constantes y predicados
Computación simbólica, no numérica.
Resolver problemas expresados en forma de
objetos y relaciones entre ellos.
MorfologíaUnificación
Funcionamiento procedimental
Listas, operadores, aritmética
Control del backtracking
Hechos
Una parte importante de los programas en
prolog son los hechos, formados por
combinación de predicados y constantes:
Constantes: se utilizan para referirse a objetos.
Predicados: expresan relaciones entre los
objetos.
Juan
progenitor(juan,luis).
progenitor(juan,maria).Ejemplo:
progenitor(juan,luis).
Luis
Juan es el progenitor de Luis
progenitor(luis,carlos)
Carlos Laura
Consultas (I) – Preguntas de sí y no
Tras compilar un programa en el intérprete,
se pueden realizar consultas:
?- progenitor(juan, luis).
yes
?- progenitor(juan, laura).
no
Maria
progenitor(luis,laura).
Consultas (II) – Variables
Si alguno de los atributos es unavariable, el
intérprete retornará los valores que puede
tomar para ser satisfecha.
Su nombre ha de comenzar con mayúscula, o con
guión bajo: _
?- progenitor(juan,X).
X = luis ;
X = maria
?- progenitor(laura,X).
no
1
Consultas (III) – Varias variables
En consultas con varias variables, se retornarán
todas las combinaciones de valores posibles:
?- progenitor(X,Y).
X = juan
Y =luis ;
X = juan
Y = maria ;
X = luis
Y = carlos ;
X = luis
Y = maria ;
Ejercicios
Formula en prolog las siguientes consultas:
¿Quién es el progenitor de Luis?
¿Quién es el abuelo de Laura?
¿Quién es hermano de Carlos?
Reglas (II)
Las reglas en prolog tienen dos
componentes: cabeza (el consecuente) y
cuerpo (el antecedente).
hijo(Y,X) :- progenitor(X,Y).
Una vez introducida laregla en el intérprete,
podrá utilizarla para responder consultas:
?- hijo(luis,X).
X = juan
Consultas (IV) – Varios
predicados
Es posible combinar varios predicados en la
misma consulta. En este caso, para
satisfacer la consulta deberán satisfacerse
todos ellos:
?- progenitor(juan,Y),
progenitor(Y,carlos).
Y = luis ;
?- progenitor(X,luis),
progenitor(X,maria).
X = juan
Reglas(I)
Podríamos introducir todos los hechos
inversos acerca de quién es hijo de quién:
hijo(luis,juan).
hijo(maria,juan).
Una manera más sencilla sería introducir una
regla:
Para todo X e Y,
Si X es progenitor de Y,
Y es hijo de X
Reglas (III) – Varios
antecedentes
Cuando el cuerpo de una regla contiene
varios antecedentes, han de ser todos
satisfechos para que se aplique:hija(Y,X) :- progenitor(X,Y),hembra(Y).
hijo(Y,X) :- progenitor(X,Y),macho(Y).
hembra(maria).
macho(luis).
?- hija(X,juan).
X = maria
2
Reglas (IV) – Ejemplo
hermano(X,Y) :progenitor(Z,X),
progenitor(Z,Y).
?- hermano(luis,H).
H = luis ;
H = maria ;
Reglas recursivas (I)
Consideremos la relación “antepasado”:
juan es antepasado de luis, maría, carlos y laura.
luis es antepasado decarlos y laura.
X es antepasado de Y si existe una sucesión
de relaciones de paternidad entre Y y X:
antepasado(X,Y) :- progenitor(X,Y).
antepasado(X,Y) :- progenitor(X,Z), progenitor(Z,Y).
antepasado(X,Y) :- progenitor(X,Z), progenitor(Z,K),
progenitor(K,Y).
etc.
Ejercicio
¿Es correcta la siguiente definición de
antepasado?
antepasado(X,Y) :- progenitor(X,Y).
antepasado(X,Y) :-progenitor(Z,Y),
antepasado(X,Z).
Ejercicios
Escribe en prolog:
Todo aquel que tiene un hijo es feliz.
Define las relaciones “abuelo” y “nieto”
Describe (informalmente) cómo modificarías el predicado
hermano para que no saliera uno hermano de sí mismo:
Reglas recursivas (II)
X es antepasado de Y si:
O bien X es el padre de Y
O bien X es el padre de un antepasado de Y
antepasado(X,Y)...
Regístrate para leer el documento completo.