Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Prolog
Prolog
introducido por Universidad de Aix-Marseille (Marsella, Francia) por los profesores Alain Colmerauer y Philippe Roussel
al inicio de '70.
lenguaje de programacin de paradigma declarativo por el uso
de toda la gente que trabaja en el campo de la Inteligencia
Articial (lingistas)
muy simple para aprender y manejar
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
Sintaxis de PROLOG
Constantes: numero (enteros o con punto otante), cadenas de
caracteres con minsculas, cadenas de caracteres entre .
Ejemplos: 2.5, 6, la vida, lavida, pedro, instalacion.
Variables: una cadena de caracteres que empieza con una mayscula o con
(guillon bajo).
33
valor.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
Un termino compuesto es un functor (su nombre es una cadena con minsculas) de una cierta aridad. Sus parmetros son
constantes o variables.
Ejemplo: madre(X,ana), madre(maria,pablo), numeroparo(32),
f(g(Y),h(Z)).
La
aridad
se
marca
con
/.
Ejemplos
madre/2,numeroparo/1,f/2.
El mismo nombre de functor se puede utilizar con una otra paridad.
Ejemplo : madre(X). Aridad madre/1.
Los comentarios se ponen entre /* y */ o despus el % hasta al
n de linea
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
pero
animal (Z ).
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
Las reglas son la traduccin de las clausulas de Horn que modelizan las deducciones de nuevos hechos. Las reglas son de forma:
termino1? . . .?terminon
termino
El
otoo 2010
c Mihaela JUGANARU
Ejemplo:
madre (X ): - hija (X , ana ). /* si ana es la hija de X */
madre (X ): - hijo (X , Y ). /* si X tiene un hijo Y ( cualquier ) */
A veces en lugar de un
control de programa.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
10
Unicacin
Se nota en PROLOG con
UAM Azcapotzalco
otoo 2010
=, que es un predicado.
c Mihaela JUGANARU
11
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
12
Ejemplos:
14 ? - X=Y.
X = Y.
15 ? - Y =5.
Y = 5.
19 ? - Z=Z.
true .
20 ? - Z=T , T =25.
Z = 25 ,
T = 25.
22 ? - R=Z.
R = Z.
35 ? - abd = abd .
true .
36 ? - abd = xyz .
false .
37 ? - X= abc ,Y =X , abc = Y.
X = abc ,
Y = abc .
38 ? - X= abc , Y= xyz .
X = abc ,
Y = xyz .
39 ? - X= abc , Y= xyz , X=Y.
false .
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
13
x=y es verdad, si
la unicacin.
x\=y es verdad, si
x y y no son uniables.
var(x) es verdad, si x es una variable non-instanciada.
nonvar(x) es verdad, si x no es una variable non-instanciada.
x==y es verdad, si x y y son iguales (sin hacer la unicacin).
x\==y es verdad, si x y y no son iguales (sin hacer la unicacin)
x is expr. se evala la expresin
este valor.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
14
41 ? - a == a .
true .
42 ? - a == X .
false .
43 ? - a == X , X == b .
false .
44 ? - a \== X , X == b.
false .
45 ? - X =2+3.
X = 2+3.
46 ? - X is 2+3.
X = 5.
47 ? - var ( X ).
true .
48 ? - X is 2+2 , var (X ).
false .
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
15
Predicados aritmticos :
x is y
x=:=y por la igualdad de dos numero o dos expresiones aritmticas, primero se evala cada parte.
x<y, x=<y, x>y, x>=y primero se hace la evaluacin aritmtica y regresa verdad si la condicin se cumple.
49 ? - X =:= X.
ERROR : =:=/2: Arguments are not sufficiently instantiated
50 ? - X =2 , X =:= X.
X = 2.
51 ? - X =2 , Y =5 , X =:= Y -3.
X = 2,
Y = 5.
52 ? - X =2 , Y =5 ,X <Y +3.
X = 2,
Y = 5.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
16
Otros predicados :
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
17
Recursividad
PROLOG no esta un lenguaje completo de programacion logica,
sino un lenguaje que intenta la resolucion de las interrogaciones
segun las reglas siguientes:
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
18
hermano (X ,Y ): - hermano (Y ,X ).
hermano (X ,Z ): - hermano (X ,Y) , hermano (Y ,Z ).
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
19
En este caso, la regla hermano(X,Y):-hermano(Y,X) debe de aplicarse una sola vez. Varianta posible : introducir un predicado
hermano2 para las reglas y dejar los hechos con el predicado
inicial hermano.
En la regla de distributividad usamos tambien el predicado nuevo.
hermano ( pablo , ana ).
hermano ( pablo , maria ).
hermano2 (X ,Y ): - hermano (X ,Y ).
hermano2 (X ,Y ): - hermano (Y ,X ).
hermano2 (X ,Z ): - hermano2 (X ,Y ), hermano2 (Y ,Z ).
20
Predicado de corte
En el caso donde hay varias reglas por un predicado PROLOG
construye un arbol donde intenta a aplicar todas reglas posibles.
El predicado de corte (cut predicate)
! permite de indicar al
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
21
Predicado fail
Este predicado produce el fracaso de la aplicacion de la regla.
Puede indicar una negacion, pero no esta suciente si hay predicados similares.
hermano ( p a b l o , ana ) .
hermano ( p a b l o , m a r i a ) .
hermano ( ana ,
maria ): f a i l .
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
22
La negacion
La negacion de un heco se expresa con lod dos predicados fail
y !, con la precaucion de poner la negacion como primera regla
(en el orden de aplicacion).
Ejemplo : por la aplicacion
likes,
likes(sam, tacos):-fail,!.
Pero, estas reglas se maneja con cuidado.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
24
Estructura IF-THEN-ELSE
Es posible de describir esto tipo de estructura if A then B else
C con :
(A > B; C)
El sentido es : prueba A y si es verdad evalua B, sino evalua C.
Ejemplo :
max (X ,Y ,Z ): -( X >= Y -> Z= X;Z =Y ).
6
7
8
9
????-
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
25
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
26
Ejemplo:
18 ? - assert ( maxabs (1000)).
true .
19 ? - assert (( menor ( X ): - maxabs (Y ),X =<Y )).
true .
20 ? - menor (3).
true .
21 ? - X =3 , menor (X) , assert ( menor (X )).
X = 3.
22 ? - listing .
max (A , B , C) :(
A >= B
->
).
%
Foreign : tcp_debug /1
:- dynamic menor /1.
menor (A ) : maxabs ( B),
menor (3).
C =A
C=B
A =<B.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
27
Listas
La lista es una estructura de datos muy utilizada en la programacin non-numrica.
Es un conjunto ordenado de elementos y puede tener cualquier
dimensin.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
28
tambin una lista sin el primer elemento (esta puede ser vaca).
Ejemplo:
[ debug ] 50 ?- X =[ a | [b ,c ]].
X = [a , b , c ].
[ debug ] 49 ?- Y = [1 | [3 , 4, [10 | []] , 5]].
Y = [1 , 3, 4, [10] , 5].
[ debug ] 44 ?- [X| Y ]=[1 ,2 ,3 ,4].
X = 1, Y = [2 , 3, 4].
[ debug ] 45 ?- [X |[ Y|Z ]]=[1 ,2 ,3 ,4].
X = 1,
Y = 2,
Z = [3 , 4].
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
29
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
30
El uso :
[ debug ] 56 ?- member (1 ,[3 , 2, 1, 0]).
true .
[ debug ] 57 ?- member (9 ,[3 , 2, 1, 0]).
false .
[ debug ] 58 ?- member (9 ,[3 ,[9] , 1, 0]).
false .
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
31
inserta(E,
Linicial, Lfinal):
inserta (X ,[] ,[ X |[]]).
inserta (X ,Z ,[ X| Z ]).
?- inserta (1 ,[2 ,3] , Z ).
Z = [1 , 2, 3].
?- inserta (R ,[2 ,3] ,[1 ,2 , Y ]).
R = 1,
Y = 3.
La insercin en la cola
insertz(E,Linicial,Lfinal):
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
reverso(L1,L2)
32
que verica si una lista es la imagen
de la otra en espejo :
reverso ([] ,[]).
reverso ([ X|T ],L ): - insertz (X ,L2 ,L ), reverso (T , L2 ).
?- reverso ([1 ,2] ,[2 ,1]).
true .
?- reverso ([1 ,2] , X ).
X = [2 , 1] .
?- reverso (Y ,[1 ,2 ,6]).
Y = [6 , 2, 1] .
Un predicado anadir(L1,L2,LF) que verica si LF es la concatenacin de las dos listas L1 y L2 en este orden :
anadir ([] ,L , L ).
anadir ([ X |R] ,Y ,[ X|F ]): - anadir (R ,Y ,F ).
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
33
Este predicado
anadir
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
34
Manejo de conocimiento
esttico o dinmico.
es posible de manejar los dos con
assert
retract
y aadir
F0 = 1,F1 = 1,
FN +2 = FN +1 + FN
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
35
Solucin esttica :
fib (0 ,1).
fib (1 ,1).
fib (N ,X ): - number (N ),N >=2 , N1 is N -1 , N2 is N -2 , fib (N1 , X1 ), fib (N2 , X2 ),X is X1 + X2 .
fib(i, )
fib(10,X) esta
tipo fib(Y,89) no
con
i<N.
terrogacin de tipo
interrogacin de
calculados no se guardan.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
36
fib(N,X) es cier-
fib2
en la resolucion de
fib
UAM Azcapotzalco
otoo 2010
los
in-
c Mihaela JUGANARU
37
findall/3
Predicado
Lista
para hacer el
verdad.
?- mujer ( X ).
= laura ;
= ana ;
= jeanne ;
= corinne ;
= frida .
?- findall (X , mujer ( X),Z ).
= [ laura , ana , jeanne , corinne , frida ].
?- findall (X ,( mujer (X), hombre ( X )) , Z ).
= [].
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
38
El predicado bagof:
Predicado.
Ejemplo:
5 ?- findall (X , ascendiente (X , corinne ), Z ).
Z = [ ana , michel , laura , mario , frida , gabriel , danielle , george , marie |...].
6 ?- findall (X , ascendiente (X ,Y), Z ).
Z = [ frida , marie , laura , laura , danielle , ana , ana , ana , gabriel |...].
7 ?- bagof (X , ascendiente (X ,Y ),Z ).
Y = ana , Z = [ laura , mario , frida , gabriel ] ;
Y = corinne , Z = [ ana , michel , laura , mario , frida , gabriel , danielle , george , mar
Y = george , Z = [ marie , jean ] ;
Y = jeanne , Z = [ ana , michel , laura , mario , frida , gabriel , danielle , george , mari
Y = laura , Z = [ frida , gabriel ] ;
...
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
39
Predicado
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
40
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU
41
write/1
writeln/1
read/1.
UAM Azcapotzalco
otoo 2010
c Mihaela JUGANARU