You are on page 1of 22

h f f g g g f e d y y apVQ4r111VrYa'aYaSV2w`'w`a!

VV'PYx

B  % ( 6 B C  6 %  D 6 B 6 5 v @ u t f    # 7 6 5  B C ( s " A   9        '&bw'80&r8&48!pGFbi!rb1r3Hd8$T&
Prolog de libre distribucion, para WINDOWS 95, NT, etc. y MS-DOS):

6 ( 9  q B  h # % C 9  6 ( 9 g  # 5 (  ) 6 f   # " 9 ) ( 9 % 9 B       p&biP&0&$G4UQ4eS2d8$T&  D 6 B D 6 5 c   # " 9 ) ( 9 % 9 B       04SWV'UQ4UTS B   # 9 5 6 9  6 # 5 X D C 9 ( 5 D 6 5 X  9 D 6 B   # " 9 ) ( 9 % 9 B       'ba&4&34!&`Y!8!&'WV'UQ4UTS  D 6 5 @  9 D 6 B  R "  ( " I  ) (      0!4&GQ$PH$ B  E  D 6 B 6 5  D C ( B  9 (  A 5 6 9  6 # 5 @ 9 (   # 7 6 5  " % # "      ) (  " % # "         '&GF!!00&34!&0080!4&&$321&0'&$!
Ciao Prolog:

Bibliografa y enlaces

Programacion Logica Programacion Logica

Transparencias, tarjeta de referencia de Emacs, etc.:

Enlaces

Bratko, I. Prolog Programming for Articial Intelligence (Segunda edici on) Addison-Wesley Ltd. 1990.

Sterling, L. y Shapiro, E. The Art of Prolog (Segunda edici on) MIT Press, 1994.

Repositorios, bibliografa, compiladores, etc.:

Jesus Correas Fern andez jcorreas@.upm.es Despacho D-2205 Departamento de Inteligencia Articial Facultad de Inform atica Universidad Politecnica de Madrid 28660-Boadilla del Monte, Madrid 17 de julio de 2002

Programacion Logica Prolog

PROLOG PROLOG 1

INTRODUCCION Logica y Computacion


programming logic algorithms verification logic programming constraints logic and AI knowledge representation logic of programming

declarative programming

Logic of Computation program verification proving properties

Computational Logic direct use of logic as a programming tool

Programacion Logica

PROLOG

Uso de la logica (I)

Uso convencional de los ordenadores No es f acil determinar la correcci on de los programas


PROLOG

Programacion Logica

Uso de la logica (II)

Logic

? YES / NO

Vision tradicional de la logica: nos permite razonar sobre la correcci on de los programas
PROLOG

Programacion Logica

Uso de la logica (III)


But, it would be interesting to also improve:

Logic

? YES / NO

La logica nos permite representar problemas Pero tambien resolverlos!

Programacion Logica

PROLOG

Aproximaciones a la computacion

Aproximacion imperativa

Lenguaje natural En principio es la aproximaci on ideal, pero:

La logica: utilizada tradicionalmente por l osofos y matematicos para representar y formalizar los razonamientos

Programacion Logica

Ejemplo de logica simbolica

Se puede representar mediante l ogica simbolica como:

Elementos fundamentales de la l ogica:

Sintacticos: conectivas, cuanticadores, constantes, variables, smbolos de funcion, smbolos de predicado Axiomaticos: axiomas, reglas de inferencia, demostraci on Semanticos

Programacion Logica

ff PQr Cp a U vutsqXiW

('    '  54 0)!&#8!7( 6 2 3

permite deducir que:

 6BA@#8!7( 6 2     $ 9  '  54 3  ('   $     !10)!&%#"! 

Ejemplo clasico de logica:

D !C bD C p w f cp C a U Qr Cp a U Xi6b Xt!iX`W F D p fXi6b X1#biyx!C cp C a U Q c a Y W U S F w h f PQ c a Y W U SQ P H F D @ge6db`XVTRIGEC

Basada en secuencias de instrucciones a ejecutar Especicacion bottom-up a partir de una arquitectura particular No adecuada para problemas complejos, como los de IA

es prolijo es ambiguo depende del contexto

PROLOG

PROLOG

De la Representacion a la Computacion

La solucion anterior es buena para la representaci on del problema Si tuvieramos un procedimiento de deducci on efectivo una nueva vision de la resolucion de problemas y la computaci on [Greene]:

programar una sola vez el procedimiento de deducci on encontrar una representaci on adecuada del problema para obtener soluciones: formular preguntas y dejar que el procedimiento de deduccion haga el resto

Representation Problem

Questions

Deduction system

Answers / Results

Algoritmo = logica + control [Kowalski, 1979]


PROLOG

Programacion Logica

Breve historia de la programacion logica


Decada de 1960

Greene: problem solving. Robinson: resolucion lineal.

Decada de 1970

Kowalski: interpretaci on procedural de clausulas de Horn: Colmerauer: Prolog (Programmation et Logique). D.H.D. Warren: Prolog compiler (hecho en Prolog). Muy eciente (WAM)

Decadas 1980 y 1990

Investigacion en paradigmas y tecnicas de implementaci on avanzadas: Japon (Quinta Generacion), US (MCC), Europa (ECRC, proyectos ESPRIT). Implementaciones comerciales Sistemas de programaci on logica paralelos y concurrentes. CLP: Programacion logica de restricciones ISO Prolog standard.
PROLOG

Programacion Logica

Desarrollos actuales

Muchos sistemas CLP comerciales Extensiones: orden superior, inclusi on de paradigma de programaci on funcional, etcetera Compiladores optimizantes, paralelismo autom atico. Sistemas distribuidos. Dialectos orientados a objetos.

Programacion Logica

PROLOG

11

Caractersticas de la Programacion Logica


Elementos clave

Aplicaciones fundamentales

Programacion Logica

Unicacion de terminos Mecanismo de inferencia autom atica Recursion como estructura de control b asica Vision logica de la computacion

Bases de datos Representacion del conocimiento Lenguaje natural Metaprogramacion En general, busqueda en un espacio de soluciones

PROLOG

('#%Y  &  $#1pFYQ41   g f y "! Y   

1pFYQ41   g f y g f y 1pFYQ41

11YDF

ba`XRP Y W Q 4U V T RS

x i t Q bw$ CuIgc P Y T gS

 2 G1 H) # % X # 5 % ( 1@9!I0&&' 1 2 H1 F) # % X # 5 % ( @ D3A"E0&&' $  2 81 B) # % X # 5 % ( 1@9"E0&&' 1 2 B1 5) # % X # 5 % ( @ D'C7A0&&' $

Ejemplo introductorio (I)

Relaciones familiares

VfedIRP Y Q $c V q d QXph rgP ai TRS T gS yy yy yy vg IVuIs P Qt T gS

Ejemplo introductorio (II)

2 G1 F) # % X 6 B # " I @9"A4&'8( 2 81 5) # % X 6 B # " I @9764&'8(

 2 % 9 s ( % 1 ( 9 5 ( ) # % X # 5 % ( 1(8'&0&4'e0&' 2'&!r 0'e0&' B # " D 9 1 6 5 % # ) # % X # 5 % ( 13'4#!'87 0&' 2(95( 1 C(" ) #%X#5%(  2 6 5 % # 1 C ( " ) # % X # 5 % ( 134#!'87 0&'

Programacion Logica Programacion Logica

Calculo del factorial de un numero:

Como se puede representar

PROLOG PROLOG 13

 2 F) ( 5 % ( 1'A4B 1 2 F) B ( 9 C 4(A4'SY!(

@ $

2 F) 6  9  # 6 % X B ( 9 C (E0&'848'SY!( 2 81 5) # % X 6 B # " I 'C7A04!(


...

 2 A 5 5 ( I) 6  9  # 6 % X B ( 9 C ('e448'84PY!(  6 5 D # C) 5 6 B 6 2 'e!&  2 6 5 % # 134

@ 

 p I)D p Xp )D p Q f

i"i hR" g

e r x aafF0 w1

d 1QR1r7wVr1" rC r g h r g e r
, , ,

!` 0` `   
f 1Fx

t  f h t x t f y D1a'Qb 9yDwQ'V
y

g f vt r g h f y 1Q40Q4u1QR1rDQpah

g pFYi

Hechos y reglas

Terminos

Programacion Logica

Variables: Cadenas de caracteres que empiezan con mayuscula (o ), pueden incluir y dgitos:

sw4e r

Un donde

Las

I $ B p 17531 986420 HE2 5 G ) ('F &ED20 % ) ('& # % f B B p  DB eQ BC  f D  D Q @ # D $ p D p  D p bD AF f  p  7p Q !   " 
es una expresion de la forma: es el nombre de un predicado y son de la forma: son nombres de predicado y los

Donde los

El numero de argumentos de una estructura es su

Estructuras: un nombre de estructura (como una constante) seguido de un numero determinado de t erminos entre parentesis:

Constantes:

Cadenas de caracteres que empiezan con minuscula, pueden incluir dgitos. Tambien pueden ir entre comillas:

Los hechos dicen cosas que son ciertas.

Numeros:

representa la implicaci logica, y las comas la conjunci on on:

p UYaaa S p P e 9pc 8bbbY Wp VUqih

he WTWc 89bbbY WW VUP Tf UYaaa SW g

eQcUYaaaYW SQ `d8bbb`XVUTRP

Ejemplos:

Hechos

es cierto

son terminos.

son terminos.

Reglas

 2 81 B) # % X # 5 % ( 1'C"E0&' 1 2 B1 5) # % X # 5 % ( @ D(X7A0&' 

1 C(" ) #%X#5%( "8487 4&4

Programacion Logica

son ciertos

PROLOG PROLOG 15

Clausulas, predicados, programas y consultas

Todas las clausulas cuya cabeza tienen el mismo smbolo de predicado y aridad forman un . Las clausulas en un mismo predicado proporcionan diferentes alternativas:

se puede leer como: para probar , hay que probar

, o probar

Ejemplo:
V2'FE)(7'"I0"8X4 42(A)D('S9Y!( $ (E4'8'84PY!( 5 I #  ( 1 F B C @ 2 F) 6  9  # 6 % X B ( 9 C  F ( 5 % 12'E)0(B 14(FADB'S9YC!( $ (E4'8'84PY!( 2 ) ( @ 2 F) 6  9  # 6 % X B ( 9 C  2 A 5 5 ( I) 6  9  # 6 % X B ( 9 C 1(&4e4'8'84PY!(

Programacion Logica

Unicacion

Unicar dos expresiones (por ejemplo t erminos) es buscar una sustituci on para las variables que hace que las expresiones sean id enticas. Ejemplo:
h

Imposible (1) Imposible (1) Imposible (2)

1. Terminos con diferente nombre y/o aridad no se pueden unicar. Solamente se pueden dar valores a las variables. 2. Una variable no se puede ligar a un t ermino que contiene esa variable, porque esto creara un t ermino innito test de ocurrencia (occurs check).
Programacion Logica

 y

h 

      h ! !

 

e x f$ `

 

4#b b 4#e4y $ x pwYw g h $ x

e 4#4

f g g VQ

y 4#Ph

4#yPh f g VYF

f g g VYF

h ! !

Una

es una asignacion de terminos a variables.

2 F1 C ( " ) # % X 6 B # " I (C!'87 04!(

2 A) "B )) 69  # 6 %XB ( 9 C 3HD&'8'!4Pr8(

Una Ejemplos:

h  8 

   !    $

Un

es un conjunto de deniciones de predicado.

es una pregunta que se realiza sobre un programa l ogico.

&Ya a a p (bbbY W &

Yaaa c P 9bbbY W P

!  !   "d

i  h i  "8A!

aa bba &Ya a a & $ " p (bbbY W '%#P Yaaa P $" c P 4bbbY W "%#P

Reglas y hechos se denominan

, o ...

PROLOG

17

PROLOG

f
 

 4d1     4i  h Fp0

Qr0 h sw'e r sw'e r  r sw'e

 A ! !!

 sw48 1r4QV r e f       #f 1r4QV f    !Qrh0 1r4QV f  f wr "4d rsF'8 VY01Yw e g a VYF sF'e8 VY01Yw f g r g    !

@G9!HI0#X5&('142 617FA0#'  'C"E04!( 2 1 ) % # % H ) % X # 5 % ( @ 2 G1 F) # % X 6 B # " I  8 B # X 5 ( 1 2@91"E)0%#%&'42(BX1 6)0#%'  'C7A04!( 5 X # 5 % ( @ 2 81 5) # % X 6 B # " I (!p% 1 '4$4&4 2%9s( (95( ) #%X#5%( 12 43Y1 4$4&4 B # " D 9 6 5 % # ) # % X # 5 % ( 2 &4'8'!7 4&4 ( 9 5 ( 1 C ( " ) # % X # 5 % (  6 5 % # 1 C ( " ) # % X # 5 % ( 2 '8'!7 4&4

 ' pw

 $"

g y wYw1pi

p y a a

"0dP Rw'8 r e

Rol de la Unicacion en la ejecucion

Tambien nos permite acceder a datos: Dado el programa:

f g r 4@4D YF!

!p p w1! 'w x x g y Fa1P iYw'i   y f VY41FV f 1Y4YFV3

Ejemplos de consultas

Programacion Logica

Programacion Logica

... PROLOG puede responder a consultas como:

Dado el programa...

La consulta: proporciona en la variable

El de un parametro depende de la forma en que se unican los argumentos al llamar a un predicado. Ejemplo: Considerese frente a

Se utiliza la unicacion para devolver valores al nal de la ejecuci on de un predicado.

Se utiliza la unicacion para pasar parametros en llamadas a deniciones de predicados.

el da lmite para la entrega de matrcula.

PROLOG PROLOG 19

i q

Arbol de busqueda
1@GC1 H )4%&#4 1D3HA"FE0#&&'  @9"A4&'8( 2 # X 5 % ( 2 1 ) % X # 5 % ( @ 2 G1 F) # % X 6 B # " I  8 ) % # 5 % 12@C17BA4#&X(4 D2'C17A)0#%&&'  @9764&'8( 1 B 5 X # 5 % ( @ 2 81 5) # % X 6 B # " I 1(8'&0&4'e0&' 2%9s(% 1 (95( ) #%X#5%( 2'&!r 0'e0&' B # " D 9 1 6 5 % # ) # % X # 5 % ( 13'&'#!'87 0&' 2(95( 1 C(" ) #%X#5%(  2 6 5 % # 1 C ( " ) # % X # 5 % ( 13&'#!'87 0&'
C1, {K=pedro}

padre_de(pedro,X)
C3, {X=miguel}

EXITO X = miguel

Programacion Logica

Un interprete esquematico de PROLOG (I)

Todas las respuestas (soluciones) posibles a la consulta.

: Lista de objetivos a demostrar. : sustitucion a aplicar a la consulta.

Programacion Logica

PROLOG

 

Una respuesta es del tipo , donde es una sustituci on que hace que sea cierto (es decir es una consecuencia l ogica del programa). FALLO, si no es posible inferir ninguna respuesta (soluci on).

$   # !   "

 

 

Un programa logico

5 6 sw'! r e

f 1YDF

   

F F d w F V

4 g 3 g 1 2g ) 0g ( g & 'g

(De quien es Juan abuelo?)


abuelo_de(juan,X)
C6, {X=juan, Y=X}

C5,{L=juan, M=X}

padre_de(juan,K),padre_de(K,X)
C2, {K=maria}

padre_de(juan,Z),madre_de(Z,X)
C1, {Z=pedro} C2, {Z=maria}

padre_de(maria,X)

madre_de(pedro,X)

madre_de(maria,X)
C4, {X=david}

EXITO X = david

PROLOG

21

y una consulta

Un interprete esquematico de PROLOG (II)


1. Inicializar la lista de objetivos a demostrar con la consulta . 2. Mientras no este vaco, hacer: 2.1. Tomar un literal de 2.2. Tomar una clausula (renombrando sus variables) del ): programa (hecho o regla, tal que y unican con el unicador . Si no hay tal clausula, terminar con FALLO. 2.3. Eliminar de y anadir (al principio de) . 2.4. Aplicar a y a . 3. Si (lista de objetivos) es vaca devolver y terminar (la consulta ha tenido EXITO), en otro caso terminar con FALLO. Los pasos 2.1 y 2.2 no est an completamente determinados. En PROLOG son, respectivamente, el primer literal y la primera cl ausula. En otros sistemas puede ser distinto.

Cuando en una rama hay un FALLO, el sistema hace backtracking e intenta otra clausula en 2.2
PROLOG

Programacion Logica

El primer programa Prolog

0. Crear un nuevo directorio

2. Entrar en el directorio 3. Crear el chero


h @ &g % h @ &g

5. Salvar el programa: 6. Cargar el programa en el int erprete de Prolog: 7. Cambiar de buffer : 8. Realizar una consulta:
 6 5 C 9  P0%F4  ( B 6  6 5 C 9   @ P0#g h @ &g

Programacion Logica

 6 5 C 9  S0"Q'C  B

1  6%C" 42 !08

( B 6  A ( B  9 @ 0) '34% $

4. Introducir el programa:

65CS0&0!&4!$ 9    D 6 B 6 5 @ 6  5 "   D 6 B 6 5 @ 6  5 "  80!&403

 6 5 C 9    B  ( B 6 P0pbF4Ug ) @

1. Entrar en el sistema: Menu Inicio

Programas

Emacs

 )  D

) 0

@ 4F

' (&

 )  D

4 531 2

D 6 B 6 5 @ 6  5 "  84!

&

' 6&

B  ( B 6 pbF'

&

&

 @ $g

h @ &g

( B 6 4

23

PROLOG

 V4TpQ41Ywx $ ! Qg g e f

@ 

 2 ( 7 6 V3

12  1 'P 4&&r0' ( 7 6 ( ) ( % 5 # 9 "  9 X ( 7 6 2  D30! 1 80e1 X D'&( 4&&r0' ( 7 6 1 2 ( % 9 6 s ) B 6 I 5 ) ( % 5 # 9 "  9 X ( 7 6 12  1 S4&&r0' ( 7 6  u ) ( % 5 # 9 "  9 X ( 7 6 2 D2 21 u 1 X D'&( 4&&r0' ( 7 6 1 X  ) B6I5 ) (%5#9"9X(76 1 2 % 9 6 s1 % 9 6 s1 ( 7 6 ) B 6 I 5 ) ( % 5 # 9 "  9 X ( 7 6 4!0U7!$0D'&( 4&&r0'
@   2 9 ( 1 X X 9 ( ) B 6 I 5 9 ( 3D2 H1 21 004'( ) 5

f D"0Qa

4afa 1fw'gr8$"0QfQ 4QfQ Vw'Y! Vw'Y f g f g f y r f g "ga Q1w4rFbVw'Y f r e pba4 ' Fa1 x

# Rp1F1r4iY rf g r h

f g 4 iwa #4
,

y r g as'wYF

rRw'e 'wYi g !Fp0 h r e # sw'!

1'9!I0'!08( 2 G1 H) 6 % (  ( # C 1 H1 F) 5 6 9 C# D 6 5 @ D2 A"E!&0!r8&0   2 G1 F) 5 6 9 C # D 6 5 @ 1'9"E!&0!r8&0  @ @ 

Programacion Recursiva

A partir del ejemplo de relaciones familiares:

1(!p&% !&44$44 2%9s( 1 (95( ) #%X#5%(  ( 9 5 ( 1 C ( " ) # % X # 5 % ( 2 &'&'#!'!7 44

 2 G1 F) # % X # 5 % ( 1@9"E0&&'  2 G1 F) # % X # 5 % ( 1@9"E0&&' f y r VYrw's

 B # " D 9 12 43Y1 4$4&4 6 5 % # ) # % X # 5 % (  6 5 % # 1 C ( " ) # % X # 5 % ( 2 '8'!7 4&4

Datos Estructurados

fYrw's y r fYrw's y r f y r Yrw's

2'9"A4&'8!( G1 F) 6 % (  ( # C 2 G1 F) 6 % (  ( # C '9"A4&'8!( 2'9"A) G1 F 2 G1 F '9"A)


5!r80 6 9 C # D 6 5 5 6 9 C # D 6 5 !r80

Programacion Logica Programacion Logica

Ejercicio: Que devuelve en


Ejemplos de programaci on con estructuras de datos:

Ejemplos de terminos compuestos:

El nombre de un termino compuesto se llama functor

Las estructuras de datos se crean usando t erminos compuestos.

Ejercicio: Denir

Dado este programa, PROLOG puede responder a consultas del tipo:

Se puede denir la relaci on

Consulta

Respuesta Y = pedro; Y = maria; Y = miguel; Y = david X = pedro; X = juan no

la consulta

como:

PROLOG PROLOG

?
25

Programacion Recursiva: Listas (I)


Las listas son un caso particular de t erminos compuestos. Estructura binaria: el primer argumento es un elemento y el segundo argumento es el resto de la lista. Para representar esto necesitamos:

El punto no se usa normalmente: el t ermino .(X,Y) se representa por [X Y] (X es la cabeza, Y es la cola)

Programacion Logica

Programacion Recursiva: Listas (II)


Ejercicio:
h aYVwr0

Dado el programa:

Obtener el resultado de las siguientes consultas:

Predicado equivalente a

(unicaci on). Ejemplos:

Programacion Logica

#4

h aYVwr0

objeto formal .(a,[ ]) .(a,.(b,[ ])) .(a,.(b,.(c,[ ]))) .(a,X) .(a,.(b,X))

sintax. cons [a [ ]] [a [b [ ]]] [a [b [c [ ]]]] [a X] [a [b X]]

sintax. elemento [a] [a,b] [a,b,c] [a X] [a,b X]


PROLOG

x x " " 9" " SC S" x x x x 7 SC S" x x " S " C S"

Xx 8 x   Sx  Sx S x  " Sx 

aYVwr0 h aYVwr0 h aYVwr0 h h aYVwr0

Un smbolo de constante: la lista vacia denotada [ ] Una estructura de aridad 2: tradicionalmente el nombre de la estructura es el punto .

27

PROLOG

#4 x r "" S"  aFV0


 2 1(

1 I 1

( $1

 $ 

 1 ( I !e F 1 F) % C# "E!0!'8( @

 2 13H

1  7$1

I

6 'C 1 1 (  #I !eH  ( % C # $) 0!'8( @

r 0a wf QsFV4

y # 0YaiD $# wVQ $# w1a d d g

 2 @G

1 !( )

 # A X 1 # X (  '&H7H1 $"G % # X (  $H1 $"G  (  $"G 5 # I # 484 @


   

 2 (

1 I 1 ( 1 F #!$7A)

  I  ( 5 # I # 484 @

 # A

 2 1 I ( 1 I 5 # I # 1HU1 $!#$) 4!' @

F4

g F00w

g #4 Q04w  x g ` " w X" Q04w " " Q04w x g


:

Programacion Recursiva: Listas (III)

Pertenencia de un elemento a una lista:

Usos de

Ver si un elemento est en una lista: a

Programacion Recursiva: Listas (IV)

6 4C

F F F

Programacion Logica

Ejercicio: Cual es el resultado de

g raa Vg

6 'C
Encontrar diferencias entre listas:

Concatenacion de listas:

4 QsFV4 r   "a xyw $ QF4 x r w w 9$ QF4 x r


:

Programacion Logica

Ejercicio: Denir

Usos de

Ejercicio: Denir

Buscar una lista que contiene un elemento:

Buscar un elemento en una lista:

Concatenar dos listas:

PROLOG PROLOG 29

Aritmetica (I)

Enfoque practico: interfaz con las capacidades aritm eticas de la maquina. Las operaciones aritm eticas no son muy generales ni declarativas. Interfaz: evaluador de t erminos aritmeticos.

, correcta si cuando se evalua , y aritmeticos, en otro caso, se produce un error. , incorrecta (error).
 

Los usuales (igual), (distinto), , , , Los argumentos de los predicados anteriores deben ser t erminos aritmeticos (en otro caso se produce un error). : se evalua el termino aritmetico y el resultado se unica con el termino . Ejemplos: qu e diferencia hay entre las siguientes consultas?:

Programacion Logica

Aritmetica (II)
Ejemplos: Supongamos que una variable libre (sin ligar): No fallan: e est an ligados a y respectivamente, y

Fallan:

Producen error:

Ejemplo de programa aritm etico: Ejercicio: Denir , : es la longitud de la lista ; del arbol .

es el numero de nodos

Programacion Logica

YiYF

&

  T 

Predicados aritmeticos predenidos:

 

f aVYwr

Ejemplos de terminos aritmeticos:

    r   r &  r   # &   ur & Y

uVFsw  rf

 

& !

  4

 " 

p#

wYw



& !A
Y

x y h r YasY

& !E

resultan ser t erminos

iY

PROLOG

31

es

PROLOG

Operador de Poda: Corte (Cut)


Mecanismo para controlar la ejecuci on. Evita el backtracking en el punto en el que se introduce. Un corte obliga a Prolog a quedarse con todas las elecciones hechas desde que una consulta (padre) se unic o por primera vez con la cabeza de la cl ausula en la que se encuentra el corte, e ignorar las dem as. Por tanto, se podan:

pero no afecta la busqueda en las consultas que est an despues del corte.

Programacion Logica

Operador de Poda: Ejemplo


   $(A4B @ 2 F) 1'E" $'C7A"        2 F) @ 2 G1 F)      1 2 F) 1 D'E!5 $'C7A" @ 2 G1 F)  2 F) 1'E4B $'C7A" @ 2 G1 F) @$) 5 2I 2 ( ) 5 @$ 2 I)  ) 2 ( 

Programacion Logica

Todas las clausulas que se encuentran a continuaci on. Todas las soluciones alternativas de la conjunci on de consultas que hay antes del corte en el cuerpo de la cl ausula.

PROLOG

33

s(A),p(B,C) A/a p(B,C)

A/b p(B,C)

l(B)

r(B),!,.... B/a !,..... B/b !,....

m(B)

l(B) B/a !,...

r(B),!,.... B/b !,....

m(B)

PROLOG

Operador de Poda: Tipos de corte (I)


Cortes Blancos: no descartan soluciones:


No afectan ni a la completitud ni correcci on: se pueden usar libremente. Cortes Verdes: descartan soluciones correctas que no se necesitan:
"0 1F'"sp1Va10w g f e g y r f g g $"4d YY1"sp1Va10w rf g

Afectan completitud pero no correcci on. Necesarios en muchas situaciones. Usar con precaucion.

Programacion Logica

Operador de Poda: Tipos de corte (II)


Cortes Rojos: descartan soluciones incorrectas de acuerdo con el signicado intencional de programa.
Y

Los cortes rojos afectan la completitud, y no se puede conar en la interpretaci on declarativa del programa para razonar sobre su correcci on: evitarlos siempre que sea posible.

Ejercicio: Denir , que compruebe si forma que proporcione un solo resultado.

est a en el arbol , de

Programacion Logica

Ejercicio: Modicar

para que solamente d e un resultado.

FxQgYF04F    Y

Y$

g YV "r QF g g  g Y11 "4VY  g YV "r QF g

x f g #4 F1w'r #4 aa1'wrw y r g

" " aFQF44w x x g " " aFQF44w x x g

 74 s'VaV4w g rf g  g  74 s'VaV4w rf g

 ` #44  ` 4  

#4  d    d

d i i d
i i

PROLOG

35

PROLOG

Q01rDQ4Y r f g h y


&

&

 9

1 D2 &

@ 2 $1(1

14'E) !'&8B  F  9 B X D C # 4F r!848B  F )  9 B X D C #  E1 )  9 B X D C # 12 27 !848B

  F1 12 4X@

&

)""C!X'&DC!#B 1 @ 9  1 !E  @ 2  X 1 ) " C X D C # $ 4F $!7"848B  2 1 ) " C X D C # 1 !!E "848B

&

  F1 ) " C X D C # 12 'C7"84!B

V2(144FA)!89BX'!B D'E!&08'C D C # 1 2  F) 5 ( s C 6 @ 2 1  F) D C # $04A78B 5 # D # C 1 2  F 5 ( &0P9 D4A) 0s @ 2 1  F) D C # $04A78B

1 2 4)

V11  RQ4dRY $b y r y r f  D5  RQ4dRY y r  r f y VV  Q411h $b  r f g  D5   Q411h r f g fQyidFr4dy  YQ rRwr$b  g f  D5   YQ Rwr g r f YV1  rQ $! g  D5   fQiQr'dy  y d   $ YQ D5 g  rQ g

Predicados meta-logicos (II)

Predicados meta-logicos (I)

Estan fuera del ambito de la logica de primer orden.

: tiene exito si

Programacion Logica

Ejercicio: Denir variables).

f h f g Y0a11w'r

&

Programacion Logica

Ejercicio: Denir , que liga todas las variables libres de nodos o subarboles del arbol X al termino T (dejando un arbol bien formado).

Ejemplo:

Usos:

controlar el orden de los objetivos, dar exibilidad a programas que utilizan algunos predicados determinados (por ejemplo, los predicados aritm eticos)

: tiene exito si

: tiene exito si

: tiene exito si

es una variable libre.

no incluye variables.

no es una variable libre.

es una constante (numero o atomo).

: X es una lista de t erminos ground (sin

PROLOG PROLOG 37

Meta-predicados: Orden superior (I)


convierte un termino

Se usan para meta-programaci on: interpretes y shells.

Permite programacion de orden superior

Ejemplo: Negacion por fallo


rQ !Q'ids1pwr y rf yf y rf  y rf yf ' $!Q'ids1V1r  !Q'ids1pwr

Existen otros predicados de orden superior (

,...)

Programacion Logica

Meta-predicados: Orden superior (II)


se suele utilizar conjuntamente con los predicados de manipulaci on de estructuras: : es un termino compuesto cuyo nombre es del termino es .
a g V g Y1

es .

: El argumento de la posici on

Ejercicio: Denir que aplique el predicado a cada uno de los elementos de (en el primer argumento de devuelva los resultados (el segundo argumento de ) en la lista Ejemplo: la consulta: debe devolver en

la lista

.
g Y1

Ejercicio: Denir que aplique el predicado de aridad 2 a cada uno de los subterminos de (en el primer argumento), y devuelva los . resultados (el tercer argumento) en el t ermino
aa g 'Y

Programacion Logica

41!'FVYi r xf e g g f e y r y 71!VQY4 s1QY0 $4 'FVYi pwr  11Qr4 Y'wVri y r y g g y f  y r y g g r

g Y1

r YV1aw

g g 0aa ' 11 4w 44 43 x g `" 1pFYQ41! x g f y

y 0aa4Yw

y 4YF

Es util pero peligrosa:

g 11 4w

h g 4$ Y  g f y r 4YQ0dp

4w

VVY VVY

en una consulta (objetivo), y lo ejecuta.

PROLOG

39

y cuya aridad

de aridad 2 ), y .

PROLOG

Modicacion Dinamica de Programas (I)


x f Va"FYaVw
PROLOG 41

Caracterstica potente: permite realizar la modicaci on de los programas en tiempo de ejecucion.

A veces es util, pero en la mayora de los casos es un error usarlos:

Debe utilizarse de manera cuidadosa y local.

La asercion y eliminacion se pueden justicar l ogicamente:

Otro uso permitido: simular variables globales.

Comportamientos/requisitos para asertar/eliminar predicados dieren entre las implementaciones Prolog.

Programacion Logica

Modicacion Dinamica de Programas (II)

Ejemplo: Un contador

Programacion Logica

4srYYrV y rf y g  g f y rf ` YYasY $4 srYYrV y r f y g  Y $D yrsY&41r1g f y g y  ` YYasY g f y r f

y g y y g 7Q41r1g "aYr y rf "QRY

r YT0w

 

Programas difciles de leer, entender, y depurar. Los programas dinamicos suelen ser mas lentos.

Asercion de clausulas que son consecuencia l ogica del programa (lemas). Eliminacion de clausulas que son logicamente redundantes.

PROLOG

42

Modicacion Dinamica de Programas (III)


Ejercicio: Denir un predicado que lea de un archivo F un diccionario, formado por hechos de la forma: leer de un archivo, debe utilizarse la siguiente estructura:
$0V1r rY g y f $01Vr$Qp1Y Y g y f y g g g  r $ 0111yr r113 u Q4f    "u YFY g Y

Para leer un termino de un stream, debe utilizarse

Ejercicio: Denir un predicado que busque la palabra P en el diccionario leido con el predicado anterior, y proporcione en S el signicado. Ejercicio: Denir un predicado signicados de la palabra P.

que devuelva en L todos los

Programacion Logica

f r h g y 1YYYF4TF 1QVQ0Yw f g YYrw1a

Y1Vg

y a0a

g g h f g raYi011ra

f f y 7 $Yap

 g u$YwY0VY
F(V

g 7YrVdV

g YrVdV

. Para

PROLOG

You might also like