Introducción a Prolog Ing. Bruno López Takeyas
INTRODUCCIÓN A PROLOG
• Lenguaje
declarativo
(opuesto
a
procedimentales) basado en reglas de la
lógica
• PROLOG = “Programming in Logic”
• Originado en Europa a principios de los
70’s por Alain Colmerauer (Universidad
de Marsella, Francia)
Programas
en Prolog
Hechos
Reglas
• La información se extrae por medio de
consultas
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
• Proposiciones:
HECHOS
o “Juan es un programador”
o “El león es un mamífero”
programador(juan).
mamifero(leon).
• Nótese que se anota primero el
predicado y entre paréntesis el sujeto de
la proposición
SINTAXIS
• Variables: Mayúsculas.
• Constantes: Minúsculas.
• Cada afirmación debe terminar con un
punto.
• No se aceptan constantes con espacios
en blanco, en lugar de ello se usa el
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
bajo
guión
primer_ministro.
(_).
P.
ejem.
• Los
comentarios empiezan
con el
símbolo %
RELACIONES
o “Juan es el padre de Miguel”
padre(juan, miguel).
REGLAS
• Sentencias condicionales
• “Si el león come carne, entonces es
carnívoro”
carnivoro(leon):- comecarne(leon)
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
CONJUNCIONES
• Emplea el operador lógico AND
• Se utiliza la coma ( , )
tia(X,Y):-hermana(X,Z),padre(Z,Y).
(Condición)
Regla
AND
DISYUNCIONES
• Emplea el operador lógico OR
• Se utiliza el punto y coma ( ; )
hijo(X,Y):-padre(Y,X);madre(Y,X).
(Condición)
Regla
OR
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
CONSULTAS
• No es necesario programar el mecanismo
de búsqueda
• Utiliza la resolución en sus derivaciones
(generalización del modus ponendo
ponens junto con la unificación)
• P. ejem.
lagarto(iguana).
serpiente(vibora).
mamifero(conejo).
Las consultas pueden ser interactivas
mediante el indicador de comandos (?-):
?- lagarto(iguana).
¿Una iguana es un
lagarto? (Termine la
expresión con
punto)
Yes.
Respuesta de Prolog
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
?-
Indicador que
espera el sig.
Comando
?-serpiente(conejo).
¿Un conejo es
no.
serpiente?
Respuesta de Prolog
Se pueden usar variables en las consultas:
?- lagarto(X).
Nombre de un
X=iguana
Yes
lagarto (Note la X
mayúscula)
Respuesta de Prolog
(Oprima ENTER para
terminar la consulta
o ESPACIO para
buscar otra
ocurrencia)
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
Otro ejemplo:
pais(usa).
pais(canada).
pais(mexico).
capital(usa,washington).
capital(canada,ottawa).
capital(mexico,cd_mexico).
Consultas realizadas:
?- pais(mexico).
yes.
?- capital(canada,washington).
no.
?- pais(japon).
no.
?- pais(X).
X=usa
X=canada
X=mexico
yes.
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
?- capital(canada,B).
B=ottawa
yes.
?- capital(R,washington).
R=usa
yes.
BACKTRACKING (RETROCESO)
• Las consultas pueden tener una o varias
metas
• Consideremos el sig. ejemplo:
compra(X,Y):-sevende(Y),gusta(X,Y),bueno(Y).
sevende(vestido).
sevende(sombrero).
sevende(zapatos).
gusta(jaime,zapatos).
gusta(maria,vestido).
gusta(maria,sombrero).
bueno(sombrero).
• La regla compra tiene éxito si todas sus
metas tienen éxito.
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
• Prolog intenta satisfacer las metas de la
consulta de izquierda a derecha y para
cada meta va probando las cláusulas
correspondientes
1er. Intento:
compra(Z,vestido):-
sevende(vestido),gusta(Z,vestido),bueno
(vestido).
• Busca la cláusula para sustituir Z (de izq.
teniendo a vestido como
a der.),
segundo argumento
gusta(maria,vestido)
• Se tiene ahora:
y encuentra
compra(maria,vestido):-
sevende(vestido),gusta(maria,vestido),
bueno(vestido).
• La regla fracasa porque no hay regla que
satisfaga bueno(vestido)
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
• Esto
no
significa
que
compra(maria,vestido) haya fracasado,
sino que se ha seleccionado una cláusula
que no conduce a la solución.
• Por esa razón es necesario aplicar un
retroceso (backtracking).
2o. Intento:
compra(Z,sombrero):-
sevende(sombrero),gusta(Z,sombrero),
bueno(sombrero).
• Busca la cláusula para sustituir Z (de izq.
a der.), teniendo a sombrero como
segundo argumento
gusta(maria,sombrero)
y encuentra
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
• Se tiene ahora:
compra(maria,sombrero):-
sevende(sombrero),gusta(maria,sombrero,
bueno(sombrero).
• La regla tiene éxito porque se hace una
prueba satisfactoria a bueno(sombrero)
ENTRADA Y SALIDA
• Se usa el comando write para desplegar
un texto o una variable en la pantalla
write(‘Hola…’).
saludo:- nl, tab(4),write(‘Hola ’),
nl, tab(20), write(X).
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
• Se usa el comando read para capturar
desde el teclado
name:- write(‘Anote su nombre:’),
read(Nombre), nl, write(‘Hola
‘),write(Nombre).
• Nótese que la variable Nombre inicia con
mayúscula.
ESTRUCTURAS
• Se pueden utilizar varios datos a la vez:
nacimiento(pedro, fecha(23,ago,1970)).
?- nacimiento(pedro, X).
X=fecha(23, ago, 1970)
yes.
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
• Consultas de todas las personas nacidas
en Agosto:
?- nacimiento(X, fecha(Y, ago, Z)).
X=pedro
yes.
ARITMÉTICA
• Se usa el predicado is
?- X is 3+4
X=7
yes.
• Uso de operaciones aritméticas en
predicados:
suma(A, B, C):- C is A + B.
?- suma(3, 4, 7).
yes.
?- suma(3, 4, X).
X=7
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
yes.
CICLOS
• En Prolog, casi no se usan ciclos, en
lugar de ellos se aplica recursividad; sin
embargo, se pueden implementar.
• P. ejem. Para imprimir los números del 1
al 10 se usa …
lista(M, N):- M<=N, nl, write(M),
NuevoM is M+1, lista(NuevoM, N).
LISTAS
• En Prolog no hay matrices, en su lugar
se usan Listas.
[maria, javier, juan]
[] %lista vacía
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
CABEZA Y COLA DE LISTAS
• Si se tiene la lista [a, b, c, d], la a es
la cabeza y la cola es la lista [b, c, d]
• Una lista cuya cabeza es A y cola es B se
anota como [A | B]
• El predicado
primer_elemento(X, [X|_]).
tiene éxito si X es el primer elemento de
la lista.
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
IMPRIMIR LOS ELEMENTOS DE UNA
LISTA
• Si la lista no está vacía, primero se
imprime la cabeza y luego la cola:
imprimir( [A | B] ):- write(A),
imprimir(B).
AGREGAR ELEMENTOS A UNA LISTA
• Este predicado tiene tres listas: A, B y
C, donde A y B se fusionan en el mismo
orden y generan C:
agregar([A | ColaA], B,[A,ColaC]):-
agregar(ColaA, B, ColaC).
http://www.itnuevolaredo.edu.mx/takeyas Email:
[email protected]
Introducción a Prolog Ing. Bruno López Takeyas
LA NEGACIÓN COMO FRACASO
• El predicado \+ tiene éxito sólo si
fracasa su argumento.
• Considere los siguientes hechos:
roja(rosa).
verde(hierba).
blanca(margarita).
• Suponga la siguiente consulta:
?- roja(amapola).
no.
• Esto no significa que las amapolas no
sean rojas, sino que no hay hechos que
lo confirmen. O sea que
?- \+roja(amapola).
yes.
?- \+roja(rosa).
no.
http://www.itnuevolaredo.edu.mx/takey
Comentarios de: Introducción a Prolog (0)
No hay comentarios