Sei sulla pagina 1di 49

Tema 5: El Lenguaje Prolog

Indice
1- Introduccin 2- Definicin de predicados y mecanismos operacionales 3- Usos procedimentales 4.1- El corte: 4.1- Porqu un predicado de corte? 4.2- Cmo opera el predicado de corte? 4.3- Funcin del predicado de corte 4.4- Cortes verdes y rojos 4.5- Ejemplos de particular inters 5- Ventajas del Prolog 6- Resumen del captulo
2

1- Introduccin

El objetivo de este tema NO es la enseanza de un lenguaje de programacin sino.... 1) Ilustrar el paradigma de computacin lgica 2) Mostrar cmo los lenguajes reales se apartan del ideal de la programacin lgica por motivos de eficiencia

Un algoritmo consta de una componente lgica o declarativa y una componente de control Un axioma puede interpretarse como la componente declarativa de un programa: - sus soluciones son las sustituciones bajo las que se satisface el axioma - su componente de control es un mtodo deductivo
5

En el paradigma de programacin lgica el programador declara un conjunto de axiomas y se despreocupa de la componente de control, que implementa un mtodo deductivo genrico: Las clusulas Horn son sistemas de axiomas donde es aplicable el potente mtodo de deduccin, consistente y completo, SLD El mtodo SLD es la base de la semntica operacional de loslenguajes lgicos y, en particular, del difundido lenguaje Prolog 6

El lenguaje Prolog es el primer y ms difundido lenguaje de programacin lgica. Un programa Prolog Declara conocimiento sobre un problema en trminos de clusulas de Horn Se ejecuta mediante un intrprete que deduce las soluciones aplicando el mtodo de resolucin SLD

Sugerencia:
Consulta documentacin adicional sobre la historia del lenguaje Prolog
7

2- Definicin de predicados y mecanismos operacionales

Cmo traducir clusulas Horn a un programa Prolog?


C1: C2: C3: C5: C7: C9: q(x,y) p(x,y) q(x,y) p(x,z), q(z,y) p(b,a) C4: p(f,b) p(c,a) C6: p(h,g) p(d,b) C8: p(i,h) p(e,b) C10: p(j,h)

Basta un sencillo cambio de notacin...


R1: R2: R3: R5: R7: R9: q(X,Y):- p(X,Y). q(X,Y):- p(X,Z), q(Z,Y). p(B,A). R4: p(F,B). p(C,A). R6: p(H,G). p(D,B). R8: p(I,H). p(E,B). R10: p(J,H).

Observa que ...


Las variables empiezan con maysculas, los predicados y constantes con minsculas y :- sustituye a Las clusulas se denominan reglas y terminan con un
10

Reflexiona sobre la definicin recursiva de predicados en Prolog 2) Las clusulas ms generales son recursivas: el predicado
definido (cabeza) aparece en la definicin (cuerpo)
R1: R2: R3: R5: R7: R9: q(X,Y):- p(X,Y). q(X,Y):- p(X,Z), q(Z,Y). p(B,A). R4: p(F,B). p(C,A). R6: p(H,G). p(D,B). R8: p(I,H). p(E,B). R10: p(J,H).
11

Qu soluciones calcula un intrprete Prolog?


% conectado(Nodo1,Nodo2):% verifica si Nodo1 y Nodo2 estn % conectados directa o indirectamente a % travs de arcos

R1: conectado(Nodo1,Nodo2):-arco(Nodo1,Nodo2). R2: conectado(Nodo1,Nodo2):-arco(Nodo1,Enlace), conectado(Enlace,Nodo2). R3: arco(B,A). R4: arco(F,B). R5: arco(C,A). R6: arco(H,G). R7: arco(D,B). R8: arco(I,H). R9: arco(E,B). R10: arco(J,H).
12

Cmo formular las preguntas a un intrprete?


existe un arco entre los nodos d y b?
es cierta arco(d,b)?

estn conectados los nodos b y g?


es cierta conectado(d,b)?

a qu nodos X est conectado el nodo a?


es cierta x conectado(a,x)?

qu nodos Y y Z pueden conectarse a travs de un camino que pase por b?


es cierta yz(conectado(y,b)conectado(b,Z)?
13

Se denominan preguntas Prolog los objetivos sometidos a un intrprete Prolog con el fin de comprobar su satisfacibilidad y/o computar las correspondientes respuestas.

14

Un motor de inferencia Prolog computa respuestas aplicando resolucin SLD al sistema de clusulas contenido en su base de datos utilizando... como regla de computacin: la seleccin del literal situado ms a la izqd. en la clusula objetivo como regla de bsqueda: la seleccin de la clusula situada ms arriba en la lista de clusulas de cada procedimiento
15

Cmo formular las preguntas a un intrprete?


existe un arco entre los nodos d y b?
?- arco(d,b).

estn conectados los nodos b y g?


?- conectado(d,b).

a qu nodos X est conectado el nodo a?


?- conectado(a,X).

qu nodos Y y Z pueden conectarse a travs de un camino que pase por b?


?- conectado(Y,b), conectado(b,Z).
16

Veamos cmo evala Prolog el objetivo: conectado( Y,b), conectado( b,Z) Recuerda el sistema de reglas Prolog...
R1: conectado(Nodo1,Nodo2):-arco(Nodo1,Nodo2). R2: conectado(Nodo1,Nodo2):-arco(Nodo1,Enlace), conectado(Enlace,Nodo2). R3: arco(B,A). R4: arco(F,B). R5: arco(C,A). R6: arco(H,G). R7: arco(D,B). R8: arco(I,H). R9: arco(E,B). R10: arco(J,H).
17

conectado(Y,b), conectado( b,Z)

R1:conectado(Nodo1,Nodo2) :- arco(Nodo1,Nodo2).

arco(Y,b), conectado( b,Z)

18

conectado( Y,b), conectado( b,Z) (1)

arco(Y,b), conectado( b,Z)


R5: arco(d,b).

Yd

conectado (b,Z)

19

conectado( Y ,b), conectado( (1)

b,Z)

arco( Y ,b), conectado( (5)

b,Z) Y d

conectado (b,Z)
R1: conectado(Nodo1,Nodo2):- arco(Nodo1,Nodo2).

arco (b,Z)

20

conectado( Y ,b), conectado( (1)

b,Z)

arco( Y ,b), conectado( (5)

b,Z) Y d

conectado ( b,Z) (1)

arco (b,Z)
R3: arco(b,a).

Za
21

conectado( Y ,b), conectado( (1)

b,Z)

arco( Y ,b), conectado( (5)

b,Z) Y d

conectado ( b,Z) (1)

Solucin: Y = d Z = a

arco ( b,Z)
Z a

22

Prolog ha explorado slo la primera rama del rbol SLD... conectado(Y,b), conectado(b,Z)
(1) arco(Y,b), conectado(b,Z) (7) (6) Ye conectado (b,Z) (1) arco (b,Z) (3) Za (2) arco(b,X), conectado(X,Z) (3) Xa conectado (b,Z) (1) arco (b,Z) (3) FALLO Za Yf conectado (b,Z) (1) arco (b,Z) (3) Za FALLO

(5) Y d

FALLO

conectado(a,Z) (1) arco (a,Z) (2) arco(a,P), conectado(P,Z)

FALLO

FALLO

23

continuando con su estrategia de bsqueda, puede encontrar nuevas soluciones... conectado(Y,b), conectado(b,Z)
(1) arco(Y,b), conectado(b,Z) (7) (6) Ye conectado (b,Z) (1) arco (b,Z) (3) Za (2) arco(b,X), conectado(X,Z) (3) Xa conectado (b,Z) (1) arco (b,Z) (3) FALLO Za Yf conectado (b,Z) (1) arco (b,Z) (3) Za FALLO

(5) Yd

FALLO

conectado(a,Z) (1) arco (a,Z) (2) arco(a,P), conectado(P,Z)

FALLO

FALLO

24

Identifiquemos los puntos de retroceso ...


*conectado(Y,b), conectado(b,Z)
(1)

(5) Yd

*arco(Y,b), conectado(b,Z)
(6) Ye

(7) Yf

FALLO

*conectado (b,Z)
(1) arco (b,Z) (3) Za (2) arco(b,X), conectado(X,Z) (3) Xa

*conectado (b,Z)
(1) arco (b,Z) (3) FALLO Za

*conectado (b,Z)
(1) arco (b,Z) (3) Za FALLO

*conectado(a,Z)
(1) arco (a,Z) (2) arco(a,P), conectado(P,Z)

FALLO

FALLO

25

exploremos el rbol en profundidad...


* conectado( Y,b), conectado( b,Z)

* arco( Y,b), conectado( b,Z) FALLO

* conectado ( b,Z)

* conectado ( b,Z)

* conectado ( b,Z)

* conectado( a,Z)

FALLO

FALLO

Soluciones:
FALLO FALLO

Y = d, Z = a Y = e, Z = a Y = f, Z = 26 a

!!Cuidado con la ordenacin de las reglas!!


Reordenando las reglas en el programa anterior... R1: conectado(Nodo1,Nodo2):-arco(Nodo1,Enlace), conectado(Enlace,Nodo2). R2: conectado(Nodo1,Nodo2):- arco(Nodo1,Nodo2).

Prolog no puede responder a la pregunta: conectado(X,Y)

27

Observa que ...


Debido a la recursin, de las ramas situadas ms a la izquierda cuelga siempre un subrbol que reproduce el rbol global.....
conectado(X,Y)
R1: conectado(Nodo1,Nodo2):- arco(Nodo1,Enlace), conectado(Enlace,Nodo2).

conectado(Z,Y), arco(X,Z) (1)

conectado(P,Y),arco(P,Z), arco(X,Z)

Prolog no encuentra ninguna respuesta, quedndose colgado en la rama infinita del rbol SLD

28

Importante
1) Las estrategias de bsqueda en profundidad pueden conducir a
computaciones no terminantes incluso cuando existe una respuesta correcta (recordar)

2) Un programador de Prolog debe ordenar cuidadosamente las


clusulas dentro de cada procedimiento, as como los literales dentro de las clusulas, para evitar la no-terminacin
El programador debe conocer las estrategias de computacin y bsqueda de Prolog y tenerlas presentes cuando disea los programas
29

3- Usos procedimentales

30

En contra de los supuestos de la programacin lgica, en Prolog es posible... Emular las construcciones iterativas de los lenguajes procedimentales
X is Y: X es una variable, Y es una expresin aritmtica, X unifica al resultado de Y

31

En contra de los supuestos de la programacin lgica, en Prolog es posible... Invocar predicados no-lgicos predefinidos de entrada/ salida y clculo aritmtico Alterar la estrategia de evaluacin mediante el uso del predicado de corte

32

4- El corte

33

4.1- Porqu un predicado de corte?

34

Cmo expresar reglas mutuamente exclusivas?


% mezcla (Xs,Ys,Zs) :% mezcla dos listas ordenadas de nmeros % enteros Xs e Ys en la lista ordenada Zs R1: mezcla([X|Xs],[Y|Ys],[X|Zs]) :X < Y, mezcla(Xs,[Y|Ys],Zs). R2: mezcla([X|Xs],[Y|Ys],[X, Y|Zs]):X = Y, mezcla(Xs, Ys, Zs). R3: mezcla([X|Xs],[Y|Ys],[X, Zs]):X > Y, mezcla([X|Xs], Ys, Zs). R4: mezcla(Xs, [], Xs). R5: mezcla([], Ys, Ys).
35

Observa que ...


Ante cualquier pregunta Prolog, una y slo una de las cinco clusulas es aplicable (mostrar)

Sin embargo el intrprete tantea todas las opciones

Sugerencia:
Comprueba la INEFICIENCIA del predicado siguiendo el flujo de evaluacin del objetivo mezcla([1,3,5],[2,3],Ks)
36

4.2- Cmo opera el predicado de corte?

37

Coloquemos cortes en el predicado mezcla...


R1: mezcla([X|Xs],[Y|Ys],[X|Zs]) :X < Y,!, mezcla(Xs,[Y|Ys],Zs). R2: mezcla([X|Xs],[Y|Ys],[X, Y|Zs]):X = Y,

!,

mezcla(Xs, Ys, Zs).

R3: mezcla([X|Xs],[Y|Ys],[X, Zs]):X > Y,

!,mezcla([X|Xs], !. !.

Ys, Zs).

R4: mezcla(Xs, [], Xs):R5: mezcla([], Ys, Ys):-

38

A B1....Kk

!
Bk+i A:- B1....Kk,!,Bk+2 ,..., Bn

FALLO FALLOFALLO
39

Definicin formal del corte


Sea una clusula C en un procedimiento que define A C= A:- B1....Kk,!,Bk+2 ,..., Bn Si el objetivo actual G se unifica con la cabecera de C y B1....Kk se satisfacen, el corte:

1) compromete la eleccin de C para reducir G;

cualesquiera clusulas alternativas para A unificables con G son ignoradas Las computaciones restantes en Bi, ik, se podan del rbol de bsqueda

2) si Bi falla para i>k+1, el retroceso opera slo hasta llegar al !. 3) si el retroceso alcanza al ! ste falla y la bsqueda procede
desde la ltima eleccin hecha antes de elegir a C para la reduccin de G.

Ejemplo: mezcla([1],[1,2],ZS)

40

4- Cortes verdes y rojos

41

Los cortes verdes podan ramas de computacin que no conducen a nuevas soluciones, proporcionando una solucin ms eficiente sin que su adicin / eliminacin altere el significado declarativo de los predicados

42

Los cortes rojos podan ramas de computacin que podran conducir a nuevas soluciones, de modo que su adicin / eliminacin altera el significado declarativo del predicado

43

Omisin de condiciones explcitas


Recuerda la definicin anterior del predicado ordena (Xs,Ys)con cortes verdes: ordena (Xs,Ys) :ordena la lista Xs en la lista Ys R1: ordena(Xs,Ys) :append(As,[X,Y|Bs],Xs), X > Y,!, append(As,[Y,X|Bs],Vs), ordena(Vs,Ys). R2: ordena(Xs,Xs):ordenada(Xs) ,!.
44

Omisin de condiciones explcitas


... y considera esta nueva definicin con cortes rojos: Como la 1 regla siempre se aplica cuando dos elementos adyacentes estn desordenados, cuando se llega a la 2 todos estn ordenados ordena (Xs,Ys) :ordena la lista Xs en la lista Ys R1: ordena(Xs,Ys) :append(As,[X,Y|Bs],Xs), X > Y,!, append(As,[Y,X|Bs],Vs), ordena(Vs,Ys).

R2: ordena(Xs,Xs):-

!.
45

Cuidado !!
El uso de cortes rojos es peligroso: Obliga a tener en cuenta el comportamiento operacional de Prolog Es propenso a error Permite escribir programas que resultan falsos ledos como programas lgicos: proporcionan conclusiones falsas, aunque se comportan correctamente porque Prolog no puede probarlas
46

Cundo utilizar el corte?


Cuando suponga un significativo beneficio de eficiencia En caso de condiciones por defecto muy engorrosas de especificar Antes de usar un corte rojo, es preferible buscar una formulacin lgica alternativa
47

5. Ventajas del Prolog

48

Qu ventajas aporta Prolog ?


Programacin declarativa, abstraccin Prototipado rpido Facilidad de aprendizaje Corto tiempo de desarrollo Facilidad de lectura y modificacin Manipulacin de estructuras de datos complejas Mecanismos de control alternativos Diversidad de aplicaciones: sistemas expertos, resolucin de restricciones, procesamiento de lenguaje, compiladores, sistemas concurrentes
49

Potrebbero piacerti anche