Programacion Logica Prolog

Reviews
Shared by: Manuel Arce Garcia
Stats
views:
1093
rating:
1(1)
reviews:
0
posted:
12/24/2007
language:
SPANISH
pages:
0
„ h f ‰ f g  „ ™ ’ ˜ g g f ˆ e d „ ™ ˜ † —  –†  ”† ’  ‘†   ‰ ˆ † … … … „ „ ‚  y y ap€VQ4r111VrYa'aYaSƒ€V2•w`“'w`ƒ¥a€!‡VV'€PƒY€x B £ ¢ % ( 6 B C  6 %  D 6 B 6 5 v @ u t f   £  # 7 6 5 ¦  B C ( s " A  ¦ 9       ¨ ¦ £ £ '&bw§¥§'§8¤0§¤¥&r8¥&48§¤¤!§pGF¤bi!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&bi¤P¤¥¥&¤¥¥§0§§&¥¤$©¥G4UQ4e©S¤¥2d8$T&¤¢  D 6 B D 6 5 ¦ c   # ¦ " 9 ) ( 9 % ¦ 9 B      ¨ ¦ £ £ 0§4¤S¤§©¥¥WV'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&¤3¤4!&¤¤`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¥¤¥¥¤¤!¤!¥0§0§&¤3¤4!&0§08¥0!4&&$©¥321&0§§'&$©¥!©¥¥©§¥¤¢ Ciao Prolog: Bibliograf´a y enlaces ı ´ ´ Programacion Logica ´ ´ Programacion Logica Transparencias, tarjeta de referencia de Emacs, etc.: Enlaces ´ Bratko, I. “Prolog Programming for Artificial Intelligence” (Segunda edici on) Addison-Wesley Ltd. 1990. ´ Sterling, L. y Shapiro, E. “The Art of Prolog” (Segunda edici on) MIT Press, 1994. Repositorios, bibliograf´a, compiladores, etc.: ı Jesus Correas Fern´ ´ andez jcorreas@fi.upm.es Despacho D-2205 Departamento de Inteligencia Artificial 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 3 ´ 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 5 ´ 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 fil 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, cuantificadores, constantes, variables, s´mbolos de ı ´ funcion, s´mbolos de predicado ı ´ ´ Axiomaticos: axiomas, reglas de inferencia, demostraci on ´ Semanticos ´ ´ Programacion Logica ff PQr Cp a U v©utsqXiW ¨ ('  ¡  ¦  ¦ '  54 0)!&©#8!7¥( 6¥¡ 2 3 permite deducir que:  6B¢A@©#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 Xiƒ6€b‚ Xt!ƒiX`W F D p fXiƒ6€b‚ 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`XVTR¥IGEC ’ ’ ’ ’ ’ ’ ’ ’ ’ Basada en secuencias de instrucciones a ejecutar ´ Especificacion “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 7 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 eficiente (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 h ¥ ¤ ¡ ¡ ¦££¢  ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ ’ 9 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 ´ ´ Caracter´sticas de la Programacion Logica ı Elementos clave Aplicaciones fundamentales ´ ´ Programacion Logica ’ ’ ’ ’ ’ ’ ’ ’ ’ ´ ´ Unificacion 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”   „ „ ˜ ‘ ƒ ’ ‰ ˜ –  ©11YD€F€‚’ 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 % ( 13§4“#!'87 0§¥¤&'¦   ´ ´ Programacion Logica ´ ´ Programacion Logica ´ Calculo del factorial de un numero: ´ ´ Como se puede representar ? PROLOG PROLOG 13    2 F) ( 5 % ( 1'A4¤¥§§B 1 2 F) B ( 9 C 4(A4'SY!( @ $¨ 2 F) 6  9 £ # 6 % X B ( 9 C (E0&§'8¤48§§'SY!( 2 81 5) # % X 6 B # " I 'C7A0§¥¥4!( ...  2 A 5 5 ( I) 6  9 £  # 6 % X B ( 9 C (§'e4§§48'8§§4PY!(  6 5 D # C) 5 6 B 6 2 ¤'e!&¥§  2 6 5 % # 13¤¥§4¦ @ ¨  ‡©©©‡ p I)D p © Xp ‡ )D p Q ¨ f ©©©‡ i"§i hR" g † ¨ ¤ˆ† ¦ ¤ ™ ˜ e ¤ ™ ˜ r – ‰ ’ x ˆ ˜ aaf¡F¤0  w¤1”   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 ’ 1Q40Q4u¥1QR1rDQpah ¤ ’  g ’ pFYi— ƒ Hechos y reglas ´ Terminos ´ ´ Programacion Logica Variables: Cadenas de caracteres que empiezan con mayuscula (o ), pueden ´ ı incluir y d´gitos: ƒ ¤ 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 ´ ´ d´gitos. 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 h¤e WTWc 89bbbY WW VU¥P 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 s´mbolo 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"¥8X¥¥4¢ 42(A)D('S9Y!( $¨ (E4§§'8'8§§4PY!( 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'8§§4PY!( 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'8§§4PY!( ´ ´ Programacion Logica ´ Unificacion   ´ ´ Unificar 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 unificar. 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 crear´a un t ermino infinito ı test de ocurrencia (occurs check). ´ ´ Programacion Logica  ¦y  ¥ ©h £ ¦ „¢  £  ’ “  ’  h ¢¡! !    ’ e ¤ x f$¨ `   —  ’  ¨4#b  ‰ ¤ b  ” ¨ “ “ ¨4#e4 y $¨ x   — ¥” ¨ ¤   ’pwYw—  g ’ h $¨ x   — ¥” ¤   ¨ ¨ e 4#4   f g g ˜ V€Q ’ “ ¨ ¨ y  4#P¥h ¤ ¥”   ’ ¨4¨#yP¥h ¤   ’ 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 0§¥¥4!( 2 A) "B )) 69 £ # 6 %XB ( 9 C ‚¥¤3¤HD¥&'8'!¤§§4Pr8( Una Ejemplos: ¦ £ h  £¦ ‘8©    ¡¢‘£   ! ¥ ¦ ¢   ¦  $ ) ¢ ¢ ! Un   es un conjunto de definiciones 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 ¡¢  ©„£ P ¦ i  £h i ¡  §"‘8¢A¢! 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    ‘4d£¥1‘ ’   ’  4i¥‘ ‘  £ ’  ‰ ˜ – h Fp0 — f ‰Qr0 — ˜ – h “ ¤ sw'e r’ – “ ¤ sw'e r’ –  r ’ – sw'e  ¤¢  ¡A¡ ! ¡ !! ¢  † ¨ ¤ sw48  1r4€QV‚’ r’ –e ˜ ‘ƒ f ‰ ˜ –   ’ ’   ’  † ¨#“f¤   1r4€QV‚’ ˜ ‘ ƒ f ‰ ˜ –   ’ ’  † ¨!Qrh0 — ¤   1r4€QV‚’ ‰ ˜ – ˜ ‘ ƒ f ‰ ˜ –  ’ ’ f wr •¨"4d¤‘ ¤ rsF–'8  VY01€Yw † ‘ £ ’ ’ e ˜ ‘ ƒ ˜ g ‘ ’ ™a¢ †•¨ V‘YF ¤ s’F'e8  VY01€Yw ˜ f g ˜ r – ˜ ‘ ƒ ˜ g ‘ ’  ¢  ¢¦  ! ¥ ¡ @G9!HI0#§X5&('“142 617FA0#§¥¤¥§'¦ ¨ 'C"E0§¥¥4!( 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#%§¥¤¥§'¦ ¨ 'C7A0§¥¥4!( 5 X # 5 % ( @ 2 81 5) # % X 6 B # " I (!p¤% 1 '§4$4¤&¤¥§4 2%9s( (95( ) #%X#5%( 12 4§3Y“1 §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 ’ €w¤Yw1pi— ’p©¦ ˜ y —  a¤ §a‰   † † •¨ ¨"‘0d¥P¤   £ ’ ‘ ¤ Rw'8  r ’ – e’ ’ ´ ´ Rol de la Unificacion en la ejecucion ´ Tambien nos permite acceder a datos: Dado el programa: † ¨ ¨ ¦ ¢ ¢ „ f g ˜ r ˜ •4@4D£¤ YF¥!¤ ‰¦  † ¨!’p©§¤ ¨ ƒ ¤ £¤ p©§  w¤1!  'w‘  ¦ ƒ ’ ¦ ’ xˆ ˜ ” ’ ’ x ˆ ˜ ” ’ ‰ – ˆ  g y ’ F¤a1P¤ €iYw'i—   ¤ ¥‰ ˜ y —  ˜ ‘ ƒ f ‰ ˜ –  VY4€1FV‚’ ˜ ‘ ƒ 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 unifican los argumentos al llamar a un predicado. ´ Ejemplo: Considerese frente a ´ ´ Se utiliza la unificacion para devolver valores al final de la ejecuci on de un predicado. ´ ´ Se utiliza la unificacion para pasar parametros en llamadas a definiciones de predicados. el d´a l´mite para la entrega de matr´cula. ı ı ı 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 ‰ ˜ –  1YD€F€‚’   ¥ § ¥ £ ¡ ¦¨¦¡ ¤¢  ¥   ¥ §  ¦¨¥  ’ %             ¡ ¨ 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 vac´o, hacer: ı 2.1. Tomar un literal de ´ 2.2. Tomar una clausula (renombrando sus variables) del ): programa (hecho o regla, tal que y unifican con el unificador . ´ 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 vac´a 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 fichero ¥ 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%F§4¢  ( B 6  6 5 £ C 9  ¥  @ ©P0#¤g ¥ h @ ¦&g ´ ´ Programacion Logica  6 5 £ C 9  ¥ ©¤S0"Q'C  B 1  6%C" 42 !0§8 ( B 6  A ( B ¦  9 @ ¥0¢©) ¥'3¥4% $¨ 4. Introducir el programa: £ ©65£¤CS0©&§¤0!&4¤!$¨ 9  ¥   D 6 B 6 5 ¦ @ 6  5 "     D 6 B 6 5 ¦ @ 6  5 "  ¡ 8¥0!&403¤¨  6 5 £ C 9  ¥   B ¦  ( B 6 ¢ § § ©P0pbF§4U©¨§g ¥ ) @ £ 1. Entrar en el sistema: Menu Inicio ´ Programas Emacs  ) ‡ ‡ D ©©©  ) 0 @ 4F % ' (&    ) ‡ ‡ D ©©© 4 531 2 D 6 B 6 5 ¦ @ 6  5 "  ¡ ¥¤¤8¥§4¤!¢¨ ) %  & ' 6& % % % B ¦ ( B 6 pbF¥'¢ © & &  % ’ ’ % B 6 ¥  @ $g ¥ h @ ¦&g ( B 6 §4¢   23 PROLOG † ¨  ¤ ¡V€4Tp£¡Q41Ywx $¨ !¤ ¥¡Qg   ’ ‘ g ˜ –¢   ƒ ’ e f ¤ ’     ’ ’ ’ @ ¨  2 ( 7 6 V3¥¥¤ ’   12 ¥¤ 1 'P 4&&r¥0¥¥'¢ ( 7 6 ( ¢ ) ( % 5 # 9 "  ¤ 9 X ( 7 6 2 ¥¤ D30!   1 80e1 X D'&( 4¤&&r¥0¥¥'¢ ( 7 6 1 2 ( ¢ % 9 6 s ) B 6 I 5 ) ( % 5 # 9 "  ¤ 9 X ( 7 6 12 ¥¤ 1 ¥S4&&r¥0¥¥'¢ ( 7 6  ¤ u ) ( % 5 # 9 "  ¤ 9 X ( 7 6 2 ¥¤D2 21 ¥u 1 X D'&( 4¤&&r¥0¥¥'¢ ( 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!¤¤$0¥¤¢D'&( 4¤&&r¥0¥¥'¢ @ ¨  2 ¤ 9 ( ¦1 X X ¤ 9 ( ¦) B 6 I 5 ¤ 9 ( 3¥¤¤©D2 H1 21 ¨00§4'§( ) ¥¤¤5 ¨ ¨ ‘ f D"0Qa£ ¤ ‘4afa£ ¤¡ˆ§  ‰1fw'gr’8¤$¨"‘0QfQ£ ¤¥4QfQ§¤  ¡Vw'Y!¤ ¡Vw'Y’ ‘ £   ‰ f  g ’ ’   ‰ f  g ¨ ˜ ¢   f y r˜ —˜ ‰   ‰ f  g "g€a¦§¤ £¡• ¤ Q1¥w4rFb¡Vw'Y’ f  r ‚ ¤ ™ ˜ e ’  p©‘b¡a4¤ '©¦   F¤a1” ’ x ˆ ˜ ¨ ¨ “ #¤   Rp1€F¥1r4iY rf ˆ ’ g ˜ r˜ hƒ ’ —™ ’ — ¨ “   f — g ¨ “ 4¤ ¡i¥wa #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&% !&4§4$4¤§¥¤¥§4 2%9s( 1 (95( ) #%X#5%(  ( 9 5 ( 1 C ( " ) # % X # 5 % ( 2 &'&'“#!'!7 4¤§¥¤¥§4¦  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 4§3Y“1 §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: Definir Dado este programa, PROLOG puede responder a consultas del tipo: ´ Se puede definir 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 : ´ (unificaci 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 s´mbolo 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"¤ ¤ ¥a¥FV0’ ’  2 © 1( 1 I 1 (§ $1 ©  § $   ¥ © 1 ( § I !e F 1 F) % C# ¦ ¦ ¥ "E!0!'¥8( @ ¦¤  2 13H 1 © § 7$1 © I 1 6 'C ¥ © 1 1 ( §  #I !eH  ¥ ¦¤ (§ % C # ¦ ¦ $¨) 0!'¥8( @ † ¨ ™   ™ “ ¤   ‘ r˜   0a¢¤ wf¡™ ¥QsFV4’ ’ ¨ “   y™  ‰  – ¤ ¨ “ #¤ 0YaiD¤™ $#¤   wVQ™ $#¤   w€1a 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 # 1‚HU1 $!#$) §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 ˜ ˜ ra€a£ Vg 6 'C Encontrar diferencias entre listas: ´ Concatenacion de listas: ¨ £¤ 4¤ ¥QsFV4’   “   ‘ r˜   ’  ‚ ¨"€¥™a¡¤ xy¤¡w™¤ € ™ ¤ $  Q¥F€4’   ™ “ x ‘ r˜   ’ ¨ w“ ¡w™¤ 9$  Q¥F€4’ ™ ¤ ™ “ ’ €’ x ‘ r ˜   : † ´ ´ Programacion Logica Ejercicio: Definir Usos de Ejercicio: Definir 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 unifica 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: Definir , : es la longitud de la lista ; ´ del arbol . : es el numero de nodos ´ ´ ´ Programacion Logica ¨   ’ ¢ Yi¤YF‘ ’ ‰  ™  ¤ — ¥& ƒ  ¤ T  ¨  ‚ ™ Y —  ´ Predicados aritmeticos predefinidos:  ¤  ¤ ’ ƒ ™ ˜ ‘ f aVYwr “ ’ ´ ´ Ejemplos de terminos aritmeticos:   ’  ¨   ” ‚ ’ ¦   ™   r ’ ’“ ¦  ’ ¦ ‡ r — & „ ™ “ ‚ ¤ ¦  “ r ™  ’ ’“ ¦ # ’ ¦ ‡ ‚ — & „   ‡ ™ ur — & „ Y   ™ “ ¨ uVFsw ¤    ˆ ˆ ’ rf ’ ¡ © ¡ ¤ ¨ § ¡ £ ¡ ¦ ¡ ¥ ¤ ¡£ ¡ ¢   † “ ‡u ’ ¦  ¦ ¡ ’ ™ Y  F”  † ¨ — & •¥!ƒ   ‚   ‚ ¨ £¤ 4¤     “ ’ ‚  "¤   ¨      „ ¨ “ p#„ ¢ €w¤Yw‘ ’ ‰  ™  ’  ¡ ’ & ƒ !A ™ Y ’ x y h r ˜ Y€asY‰ & ƒ !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 unific 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©§¤   1€F‚'"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 significado intencional de programa. †   Y¡¤ ´ Los cortes rojos afectan la completitud, y no se puede confiar en la interpretaci on ´ declarativa del programa para razonar sobre su correcci on: evitarlos siempre que sea posible. Ejercicio: Definir , que compruebe si forma que proporcione un solo resultado. ´ ´ est a en el arbol , de ´ ´ Programacion Logica “ ’ Ejercicio: Modificar ´ para que solamente d e un resultado. † •¨ ™ ¤ ’ ’  ¢£ˆ˜Fx¤ˆQgY˜F0—4F— ‚ ˜  †    Y§‚ ’ †   ¤ Y¡$¨ ’ ‰ ¤g ƒ ¤ ¥YV¢ "r Q©F¥‘ † ¨   g ’ ˜ ƒ  ƒ ™ ¢’   g ’ ˜ ƒ ’ ˜  g ¥Y11¢ "4VY‰ ‚ ¨ ¤g ƒ ¤ ’ ¥YV¢ "r Q©F¥‘   g ’ ˜ ƒ  ƒ ™ ¢’ ’ ¨ “   ¢ˆ ˜ xˆ ƒ ‰ f g #4¤ £F¤©1w'r’ ’ ¨ “ #4¤   aa1¥'wrw ™ ˜ y r ˜  g ’ ’ ¨"¥™ ¤ “ "¤   £aFQ€F44w— € x ¢ ˆ ˜ x ˆ g ˜  — ˜ ¨ € "¥™ ’ ¤ "¤ ’   £aFQ€F44w— 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 ¨ ¥Q¤01rDQ4Y‰   ‘ r –f g hƒ ’ y™  ’  € ¥ & &    ¦§9   § 1 D2 & @¨ 2   $1(¤1  ¤14'E) !¥¤'&8¥B  F £  9 B X ¢ £ D C # ¤ © 4F r¨!8¥4§¥¤8§B  F§ ) £  9 B X ¢ £ D C #  E1 § ) £  9 B X ¢ £ D C # 12 27© ¨!8¥4§¥¤8§B   F1 12 4X@ &  ¢)"¥"C!X'¢&£D¤C!#¥B 1© @ ¦§9      1 ¥!E    ¤ @¨ 2  X§ 1  ) " C X ¢ £ D C # $‚© 4F $!7£"¥84§¥¤8§B  2 § 1 ) " C X ¢ £ D C # 1‚© !!E "¥84§¥¤8§B &   F1  ) " C X ¢ £ D C # 12 'C7£"¥84§¥¤!¥B V2( ¤144FA)!£8§9¤BX'¢§£¥¤!¥B D§'E!&08'C D C # 1 2  F) 5 ( s C 6 @¨ 2  1  F) ¢ £ D C # $‚¡04A7§¥¤8§B 5 # D # £ C 1 2  F 5 ( §¤&0P9 D§4A) §0s @¨ 2  1  F) ¢ £ D C # $‚¡04A7§¥¤8§B 1 2  4‚¢) ’ ‰ ’ €‰V11” † ¨  RQ4dRYˆ $b¥” y r ’ y ™ r f ¤ ¨ “   D5 ’  ¨ RQ4dRYˆ   y r ’™ ’ r f y ’ ’ ’€VV” † ¨   ‘Q¤411h $b¥” ‰ ‰ ’  r –f g ¤ ¨ “   D5 ’   ¨   Q¤’411h ‘ r – f g ’ ’ fQy¤id‘Fr¥4dy † ¨   Y’Q£ rRwr™$¨b¥”  ˜ ˜ ˜  g f ¤ “   D5 ’   ¨   YQ’£ Rwr g ’ r f ’ ’ ’YV1”  ‰ ‰ ’ † •¨ ¥r’Q£ ¤$¨! ¥”   g ’  D5 ’   fQi„Qr¥'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: Definir variables). ¨ ¨ ©¤   ’ f ‘ ’ h  ‰ ƒ ‰ f  g Y0a1©1w'r’ & ´ ´ Programacion Logica Ejercicio: Definir , 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 flexibilidad 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'ids1¥pwr ¨ ’ y‰ –™ rf ¤  yf ¤ ¤ ¨ ’ y‰ –™ rf ¤  ‰ ‰ ’  ¨ ’ y‰ –™ rf ¤  yf '  $!Q'ids1¥¡V1rˆ ‚ !Q'ids1¥pwr 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: Definir 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: Definir 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 •7€1!¥VQY4™ ¨ s1QY0™ $4¨ ¥€'FVYi— pwr •¨ 1¥1Qr4ƒ 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™  0aa£4Yw ¤ y ™  4YF  ’ Es util pero peligrosa: ´ ’  ‘ ˜ g    ’ €11¡  4w— ¨ ¨ ‚¤ ¨¤ h g 4©$•   €Y’ ’ ‚ ¨ ‚¤ ¤ ¨  g f yˆ r – 4©¥YQ0d¤p” ’  ’ 4w— ¨ ¡VVYˆ   ‰ ‰ ’ ’ ¨ ¡VVYˆ   ‰ ‰ ’ ’ ’           en una consulta (objetivo), y lo ejecuta. PROLOG 39 y cuya aridad de aridad 2 ), y . PROLOG ´ ´ Modificacion Dinamica de Programas (I) † † † ¤ ¦ „ x ™  ‰ f  V€a"F¤YaVw‚’ PROLOG 41 ´ Caracter´stica potente: permite realizar la modificaci on de los programas en ı ´ tiempo de ejecucion. A veces es util, pero en la mayor´a de los casos es un error usarlos: ´ ı Debe utilizarse de manera cuidadosa y local. ´ ´ ´ La asercion y eliminacion se pueden justificar l ogicamente: Otro uso permitido: simular variables globales.   Comportamientos/requisitos para asertar/eliminar predicados difieren entre las implementaciones Prolog. ´ ´ Programacion Logica ´ ´ Modificacion Dinamica de Programas (II)   Ejemplo: Un contador † ´ ´ Programacion Logica † 4¨©§sr§YYrV’ ¨ ¦  y rfˆ  y g ˜™ ™  ¨ g f ‘ ’ y rf `‚ ©¦   YYasYˆ † ¤ € ¦$¨4¨  sr§YYrV’ 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 "aY€r€’ ¦ „ y rf "QRYˆ ¡ ˆ  — ’ r YT0w‘¢ ‘  ‚ ’ ’ ’ ’             Programas dif´ciles 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 ´ ´ Modificacion Dinamica de Programas (III) Ejercicio: Definir 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 ‰ ¤ $—01˜Vr ¢ $Qp1Yƒ €€Y‰ ¨ ’ g y ™ f y’ ‘ g ˜ ˜ ¤ ’ g   ’ ˜ g  r˜  $¨ —01˜11yr¡¤ ‘r113¤ u  ¥Q4f  ¨  ˆ  ‘ ‚ "u  YFYƒ g ˜ ˜ €€Y‰ ´ Para leer un termino de un stream, debe utilizarse . Ejercicio: Definir un predicado que busque la palabra P en el diccionario leido con el predicado anterior, y proporcione en S el significado. Ejercicio: Definir un predicado significados de la palabra P. que devuelva en L todos los ´ ´ Programacion Logica ¨ f ‘ ’ ˆ  ”  r h    ’ g  ’ ‰ ’     y ˆ  1YYYF4T‘¤F¡¤ 1Q‚€VQ¡0Yw‘ f ‘ ’ ˆ  ‘ ˜ g YYrw€1a ¨ ¨¤    ‘ ’ ˜ ©¥¡¥Y1Vg ˜ y ™ a0a˜ ˜ ™ g ’ — ’ g h f g raYi011ra ¨    ™ f ‘ f y 7 ¤ ¡$Yapƒ  ¨   ˆ  ‘ ƒ g ˜ ˜ u$YwY0€VY‰ ˜  ˜ F(V‘ ¨  ¤    g ’ ˆ ™ – 7¡¡¥YrVdV g ’ ˆ ™ – YrVdV        . Para PROLOG

Shared by: Manuel Arce Garcia
Other docs by Manuel Arce G...
FPGA Tutorial with SPARTAN 3
Views: 2862  |  Downloads: 122
JMF guide
Views: 1111  |  Downloads: 45
biblia de los trucos para windows e internet
Views: 5789  |  Downloads: 391
Apuntes de analisis numerico
Views: 5509  |  Downloads: 353
manual de matlab 7 0 español
Views: 36752  |  Downloads: 1790
criptografia y seguridad
Views: 4363  |  Downloads: 227
criptografia-matematicas
Views: 2279  |  Downloads: 158
norma rs232
Views: 4052  |  Downloads: 111
cienematica de un robot
Views: 2141  |  Downloads: 85
topologia
Views: 424  |  Downloads: 6
Teoria y praxis - EMMANUEL KANT
Views: 3113  |  Downloads: 21
Romero y julieta - Willian Shakespeare
Views: 2551  |  Downloads: 13
Procesos Elementales En Una Computadora Cuantica
Views: 1524  |  Downloads: 13
Politica - Aristoteles
Views: 830  |  Downloads: 12
Related docs
programacion logica
Views: 858  |  Downloads: 91
Tecnicas basicas de programacion en Prolog
Views: 3032  |  Downloads: 173
Programacion practica en prolog
Views: 2433  |  Downloads: 187
Programacion Avanzada
Views: 4297  |  Downloads: 113
Programacion
Views: 192  |  Downloads: 0
Programacion 2009-2010
Views: 6  |  Downloads: 0
Introduccion a la Programacion Funcional
Views: 852  |  Downloads: 55
Introduccion a la programacion
Views: 21  |  Downloads: 5