Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROLOG
La programacin en prolog consiste en escribir clusulas
de Horn:
1. Hechos (facts): A .
PROGRAMA
Hechos
Los hechos no tienen que reflejar el mundo real
necesariamente, pero ser nica y exclusivamente
lo que PROLOG tomar como verdadero.
le_gusta_a(juan,maria).
valioso(oro).
tiene(juan,libro).
da(juan,libro,maria).
madre(ana, juan)
Reglas
Son utilizadas para expresar que un hecho depende de
un grupo de otros hechos.
abueloPaterno(X,Y):- padre(X,Z), padre(Z,Y)
X es abuelo paterno de Y si X es padre Z y Z es padre de Y
progenitor(X,Y):- padre(X,Y)c
progenitor(X,Y):- madre(X,Y)
X es progenitor de Y si
X es padre Y o
X es madre de Y
Reglas
REGLAS RECURSIVAS
Permiten definir relaciones en trmino de si misma.
ancestro(X,Y):- progenitor(X,Y).
ancestro(X,Y):- progenitor(X,Z), ancestro(Z,Y).
Ejercicios
Definir las reglas:
hermano(X,Y)
hermano(X,Y):- progenitor(Z,X), progenitor(Z,Y), X \= Y.
tio(X,Y)
tio(X,Y):- hermano(X, Z), progenitor(Z,Y).
Consultas
Dado el siguiente programa
?- progenitor(pilar,belen)
yes
progenitor(pilar, belen).
progenitor(tomas, belen).
progenitor(tomas, lucia).
progenitor(belen, ana).
progenitor(belen, pedro).
progenitor(pedro, jose).
?- progenitor(pilar,lucia)
no
?- progenitor(tomas,X).
X = belen ;
X = lucia.
?- progenitor(X,belen).
X = pilar ;
X = tomas ;
false.
?- progenitor(tomas,X).
incgnita
?- progenitor(X,belen).
dato
El mismo predicado puede brindar distintos servicios, de
acuerdo a la forma en que se consulte el programa.
En programacin funcional sera necesario definir varias
funciones para brindar los distintos servicios que puede dar un
predicado.
Sintxis
madre (laura, martina).
Nombre de
la relacin
Argumentos
Constantes
tomos
Nmeros
Variables
Normales
Annimas
Simples
Trminos
vlidos
Estructuras
Resultado
X is 3+5
Tiene la solucin X = 8.
8 is 3 +5.
Tiene xito
3+5 is 3+5.
1. p(1).
2. q(X):- p(Y), X is Y+2.
?- q(Z).
Z = 3.
?- q(2).
false.
is' NO ES UNA ASIGNACIN
Predicados relacionales
Expresin op Expresin
op ::= < | > | =< | >= |=:=(igual)| =/= (distinto).
Sea la consulta A op B (A y B expresiones).
Se evaluan A y B:
Si el resultado de A y B, satisfacen la relacin que
representa el predicado relacional el predicado es verdadero.
Si el resultado de A y B, no satisfacen la relacin que
representa el predicado relacional el predicado no es
verdadero.
Si A o B no son expresiones aritmticas el predicado falla.
Si A o B no son expresiones ground, ocurre un error.
Ejercicios
Definir el predicado mayor(X,Y, Z) que devuelve verdadero si
Z es el nmero mayor entre X e Y.
?- mayor(1,2,2).
true.
?- mayor(4,2,Z).
Z=4;
false.
?- mayor(4,4,X).
X = 4.
Ejercicios
Definir el predicado suma(X,Y, Z) que devuelve verdadero si
Z es la suma de X e Y.
suma((X,Y, Z):- Z is X + Y.
?- suma(1,3,4).
true.
?- suma(1,2,X).
X = 3.
?- suma(X,4,6).
ERROR: is/2: Arguments are not sufficiently instantiated
Ejercicios
Definir el predicado exp(X,Y, XY) que devuelve verdadero si
XY es el resultado de elevar X a la Y
exp(X,0,1).
exp(X,Y,XY) :- Y1 is Y-1, exp(X,Y1,XY1), XY is X * XY1.
?- exp(3,3,X).
X = 27.
?- exp(X,2,4).
ERROR: is/2: Arguments are not sufficiently instantiated
Listas
Una lista es un par de elementos en donde el
primero es un trmino y el segundo es
recursivamente el resto de la lista.
Notacin:
[ ]: lista vaca
[a1 , a2, ... , an]: lista de n elementos
[X | Y]: X, primer elemento de la lista - Y, cola de la lista
[a1 , a2 | X]: a1, primer elemento de la lista
a2, segundo elemento de la lista
X, cola de la lista
Listas y Unificacin
Lista1
Lista2
Unificacin
[X,Y,Z]
[X,Y,Z]
[a,b,c]
[a,b,c]
[a]
[a]
[X|Y]
[X|Y]
X = a, Y = [ ]
X = a, Y = [ ]
[X, Y | Z]
[X, Y | Z]
[a, b, c]
[a, b, c]
[[a,Y]|Z]
Y]|Z]
[[a,
[[X,b],[c,d]]
[[X,b],[c,d]]
X=a,
X=a,
Z=[[c,d]]
Z=[[c,d]]
[a|Y]
[a|Y]
[a,b]
[a,b]
YY
= [b]
= [b]
[a,b]
[a,b]
[b,Z]
[b,Z]
nono
[a|Q]
[P|b]
Y=b,
Y=b,
P=a, Q=b
CONSULTA
( Lista([a , b , c]) )
(Lista([a , b , c]))
1 ,
2 , = {X = a , Y = [b , c]}
(Lista ([b , c]))
1 ,
2 , = {X = b , Y = [c]}
(Lista([c]))
1 ,
2 , = {X = c , Y = [ ]}
(Lista([ ]))
1,={}
()
2. miembro(X,[Y|Ys]):-miembro(X,Ys).
f es una consulta
/ R |= f
?
f = miembro(a , [s , a , d]) ;
Si existe y f
= miembro(a , [s , a , d])
f = miembro(a , [s , T , d]) ;
Si existe y f
= miembro(a , [s , a , d])
10
funciones
PROGRAMA
libro(The Art of Prolog , autor(leon , sterling),
editor(The MIT Press)).
libro(Inside Smalltalk v1 , autor(wilf , lalonde),
editor(Prentice Hall)).
libro(Inside Smalltalk v2 , autor(wilf , lalonde),
editor(Prentice Hall)).
apellido_autor(Titulo , X) :- libro(Titulo , autor(T , X) , K).
Consulta:
apellido_autor(The Art of Prolog , T)
Respuesta:
T = sterling
11
Ejercicios
Definir los siguientes predicados
factorial(X,F): devuelve verdadero si F es el factorial de X
long(L,N): devuelve verdadero si N es la longitud de la lista L
suma(L,N): devuelve verdadero si N es la suma de los elementos
de la lista L
invertir(L,LI): devuelve verdadero si LI contiene los elementos
de L en orden inverso
primero(L,X) : devuelve verdadero si X es el primer elemento de
la lista L
ultimo (L,X): devuelve verdadero si X es el ltimo elemento de
la lista L
12