Professional Documents
Culture Documents
Lenguajes Formales y
Autmatas
Introduccin a PROLOG
2 cuatrimestre de 2007
Departamento de Cs. e Ing. De la computacin
Universidad Nacional del Sur
PROLOG
Hechos
PROLOG
Lenguaje
para programacin/computacin
simblica
Adecuado para la resolucin de problemas que
involucra objetos y relaciones entre objetos
Un
nublado :- llueve
Qu dice el programa
profesor(pedro).
si el trmino pedro lo utilizamos para
hechos
docente(X):- profesor(X).
docente(X):- asistente(X).
docente(X):- ayudante(X).
reglas
Qu dice el programa
docente(X):- profesor(X).
si el predicado docente(X) lo utilizamos
para representar que X es docente, y como
antes el predicado profesor(X) lo usamos
para expresar que X es profesor/a, entonces,
la regla est diciendo que
Si X es profesor entonces X es docente.
profesor(X) docente(X)
Varias reglas
docente(X):- profesor(X).
docente(X):- asistente(X).
docente(X):- ayudante(X).
Otra regla
Resumiendo
Supongamos
p(1).
q(1).
q(3).
s(X,Y):- p(X),r(Y).
Grafos y caminos
Supongamos
arco(a,b).
arco(b,c).
arco(b,d).
arco(d,c).
Escribo
Luego,
bob
ann
liz
pat
jim
[Bratko- Prolog programming for AI]
Veamos
Family tree
parent(tom,
parent(pam,
parent(tom,
parent(tom,
parent(bob,
parent(bob,
parent(pat,
Intrprete PROLOG
tom
camino(X,Y):- arco(X,Y).
camino(X,Y):- arco(X,Z), camino(Z,Y).
Consultas Prolog
pam
Hechos
bob).
bob).
bob).
liz).
ann).
pat).
jim).
Tenemos
un programa
de 6 clusulas. Cada una
declara un hecho
sobre la relacin
parent
Podemos hacer
consultas sobre lo que
establece este programa
parent(tom,
parent(pam,
parent(tom,
parent(tom,
parent(bob,
parent(bob,
parent(pat,
bob).
bob).
bob).
liz).
ann).
pat).
jim).
Consultas (1)
Es padre bob de pat?
?- parent(bob, pat).
Consultas (2)
Encuentre un X y un Y tal que X sea padre de Y?
?- parent(liz, pat).
?- parent(bob, X).
?- parent(Y, jim), parent(X,Y).
OBS: X es una variable. En cambio, bob, liz, pat,etc. son tomos e identifican
objetos fijos.
Reglas
Ms consultas
Quines son los nietos de tom?
Tienen un mismo padre ann y pat?
Tiene hijos liz?
offspring( Y, X)
:- parent( X, Y).
Para todo X e Y:
Y es offspring (hijo) de X si X es parent (padre) de Y
Reglas: P :- Q
Especifican que una conclusin P es cierta la condicin Q
se satisface
P :- Q
Cabeza
(conclusin)
pam).
liz).
ann).
pat).
male( tom).
male( bob).
male( jim).
sister/2
sister(X,Y):-
parent( Z, X),
female( X).
?- sister( X, pat).
X = ann;
X = pat
Cuerpo
(condicin)
Ms definiciones
Ms Hechos y Reglas
female(
female(
female(
female(
:-
sister(X,Y):-
parent( Z, X),
parent( Z, Y),
female( X).
Consultas
?- sister( ann, pat).
?- sister( X, pat).
Reglas recursivas
parent( Z, Y),
% sister(pat,pat) :(
parent(X,Z).
predecessor(X,Z):-
X\=Y.
%ojo!
?- predecessor(tom,pat).
yes
Cmo se obtiene esa respuesta? (pizarrn)
%caso base
Datos
Objetos.simples.CONSTANTES
constantes
objetos
estructurados
tomos:
pam
hola_mundo
Tom
Miss Jones
simples
variables
constantes
tomos
nmeros
nmeros
Objetos.simples.VARIABLES
Empiezan con Mayscula
No se declaran.
Variables e Instanciacin
Ver
intrprete
is /2
Unificacin (=)
No es igualdad !
No es asignacin !
X = a.
5 = 2+3.
ciao = chau.
Hola = Ciao.
W = a, W = b.
yes
no
no
yes
no
Listas
Son secuencias de elementos
Predicado: is/2
2
2
R
R
W
is 2+0
= 2+0
is 2*3
= 5, R is 2*3
is [1,2,3]
yes
no
yes
no
no
Longitud
de una lista
Ejemplos de listas:
[ ] , [a,b,1,hola,chau], [p(x),q(R,S),[3,a],[]], etc.
longitud([],0).
longitud([X|Xs],N):- longitud(Xs,Ns),
N is Ns+1.
Concatenar
dos listas
concatenar([],X,X).
concatenar([X|Xs],Y,[X|Z]):- concatenar(Xs,Y,Z).
X
Xs
X
Xs
Y
Z
Ver interprete
uso inverso
Ejercicios
Definir
InsertSort
Algoritmo
predicados
visto en teoria
cantidad_As(L,As)
pertenece(X,L)
reverso(L, Lr)
ultimoElemento(
...
insert (x, S) =
if S = []
then [x]
else if x head(S)
then x :: S
else head (S) :: insert(x, tail(S))
menor(L,M)
Definamos
a:
b, p.
b:
q.
b:
e.
e.
menor([X],X).
menor([Y|Ys],Y):-
not(Arg)
Es exitoso (i.e responde yes) cuando
menor(Ys,Menor),
Y < Menor.
menor([Y|Ys],Menor):-menor(Ys, Menor).
Dada
existeOtroMenor(L,X):- pertenece(Y,L),
Y\=X,
Y<X.
a : b, p.
b : q.
b : e.
e.
a : e.
: a.
C5
b,p
C2
q,p
e
C4
C3
e,p
C4
fail
p
fail
pertenece(X,L):- append(As,[X|Bs],L)
X pertenece a L si existen As y Bs tales que
As concatenado con X.Bs es L
intersectan(A,B):- pertenece(X,A),
pertenece(X,B).
A y B se intersectan si existe un X tal que
X pertenezca a A y a B
pertenece(X,L),
not(existeOtroMenor(L,X)).
C1
?- not(p).
yes
?- not(e).
no
Otros ejemplos
minimo(L,X):-
?- p.
no
?- e.
yes
Objetos.ESTRUCTURADOS
Son objetos con muchas componentes. Los componentes
pueden, a su vez, ser estructurados.
Ejemplos:
fecha(4, abril, 2006)
functor
argumentos
Ms ejemplos:
Prueba, de
arriba para
abajo, de
izquierda a
derecha
Trminos
Matching
Matching (2)
1 ?- fecha(D, M, 1983) = fecha(D1, mayo, A1).
D = _G429
M = mayo
D1 = _G429
A1 = 1983 ;
Matching (3)
Algoritmo de Matching
(1) Si S y T son constantes, entonces S y T unifican ssi son el mismo objeto
(2) Si S es una variable y T es un trmino, unifican si S se puede instanciarse
a T (idem. Viceversa)
(3) Si S y T son estructuras, unifican solo si
(1) S y T tienen el mismo functor principal y,
(2) todos los componentes correspondientes (argumentos) unifican
Fin