Operador de corte (cut): Motivaciones. Cut (!): Definición formal. Cut (!): Implicancias de la Definición. Aplicaciones. Cut (!): Ejemplo. b,!

Documentos relacionados
5.3 Tipos de Datos en Prolog

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Bases Formales de la Computación

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Java Avanzado Facultad de Ingeniería. Escuela de computación.

6. Operadores en PROLOG

Tema 3.- Predicados y sentencias condicionales

Métodos de Inteligencia Artificial

Tema: Clases y Objetos en C#. Parte II.

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Instituto Tecnológico de Celaya

Principios de Computadoras II

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Programación declarativa ( )

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Programación NO Lineal (PNL) Optimización sin restricciones

INGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño

Tema 2 Introducción a la Programación en C.

2.2 Nombres, Ligado y Ámbito

Miguel García Remesal Departamento de Inteligencia Artificial.

Programación Avanzada. Análisis Especificación del Comportamiento del Sistema

Tabla de Símbolos. Programación II Margarita Álvarez

Diagramas de secuencia

Funciones como Subprogramas en C++

Manual de turbo pascal

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Lenguajes de Programación

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

Procesadores de lenguaje Tema 6 La tabla de símbolos

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

UNIVERSIDAD MAYOR DE SAN SIMÓN FACULTAD DE CIENCIAS Y TECNOLOGÍA INGENIERÍA DE SISTEMAS BÚSQUEDA PRIMERO EL MEJOR

ASIGNATURA: ESTRUCTURA DE DATOS II

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

PHP: Lenguaje de programación

Breve introducción a la Investigación de Operaciones

Práctica 2 Animaciones

Inteligencia artificial

Representación del Conocimiento Otros formalismos. Licenciatura en Ciencias de la Computación. Introducción a la Inteligencia Artificial.

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Benemérita Universidad Autónoma de Puebla

Ejercicios de Lógica Proposicional *

Universidad de Guanajuato Tronco Común de Ingenierías

Inteligencia en Redes de Comunicaciones - 08 Agentes

Capítulo 4 PROLOG 4.1 Introducción

Introducción a las RdP. Optimización basada en redes de Petri. Redes de Petri. Son objeto de estudio: RdP. Ejemplos:

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

20483 Programación en C#

Tema 13: Apuntadores en C

1

Microsoft Visual Studio está basado en.net framework. Definiciones de.net Framework:

5.2 Introducción a Prolog. Lenguaje Prolog. Características de Prolog. Su nombre viene de Programación en Lógica, creado a comienzos de los 70:

Anexo. Control de errores

Dr. Juan R. Mejías Ortiz 1

Tema 6: Programación Lógica: semántica declarativa. Lenguajes y Paradigmas de Programación

ESCUELA SUPERIOR POLITECNICA DEL LITORAL PROGRAMA DE ESTUDIOS

Parte I: Elementos del lenguaje Ada

Programación con Visual C#

Tema 6: Teoría Semántica

INDICE Parte 1. Visual Basic Capitulo 1. Qué es Visual Basic? Capitulo 22. Mi Primera Aplicación Capitulo 3. Elementos del lenguaje

Ecuaciones Lineales en Dos Variables

Lógica Proposicional. Sergio Stive Solano Sabié. Marzo de 2012

Aplicaciones VBA con Excel

Depto de Cs e Ing. de la Computación Universidad Nacional del Sur

TEMA 3: El proceso de compilación, del código fuente al código máquina

PROGRAMACIÓN UNIDADES

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

UNIDAD IV DISTANCIA ENTRE DOS PUNTOS

COMPETITIVIDAD EMPRESARIAL RETORNO SOBRE EL CAPITAL EMPLEADO (ROCE) RETORNO DE LA INVERSIÓN N (ROI) Reliability Management

PROLOG Inteligencia Artificial Universidad de Talca, II Semestre Jorge Pérez R.

C a l ses P P y y NP C a l se P C a l se N P N P [No N n o -De D te t rmin i i n s i ti t c i Polynomial-tim i e]

Lenguaje de Programación

Usando el Sistema Operativo

Cristian Blanco

Programación Orientada a Objetos

JAVA -INTRODUCCIÓN AL LENGUAJE

Matriz A = Se denomina MATRIZ a todo conjunto de números o expresiones dispuestos en forma rectangular, formando filas y columnas.

Programación Declarativa UNIVERSIDAD DE MÁLAGA

4.1 CONGRUENCIA ENTRE LOS OBJETIVOS DEL PLAN DE ESTUDIOS Y EL PERFIL DE EGRESO CON LAS LGAC:

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

INTERVALOS Y SEMIRRECTAS.

Tema 3: Conjuntos y Funciones

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

EJERCICIO 26 DE EXCEL

PATRONES DE DISEÑO DE CREACIÓN. Abstract Factory Builder Factory Method Prototype

Mercedes Granda Departamento de Electrónica y Computadores. Las propiedades de las redes de Petri nos permiten

Manual Excel. RGA Training & Solutions

Herramientas computacionales para la matemática MATLAB: Funciones definidas por el usuario (parte I)

Tema 1. PROGRAMACION en PROLOG Sintaxis: Hechos, Preguntas y Reglas Sintaxis: Objetos estructurados. Listas.

CAPITULO 1 INTRODUCCION AL PROYECTO

LA FORMA TRIGONOMETRICA DE LOS NUMEROS COMPLEJOS Y EL TEOREMA DE MOIVRE. Capítulo 7 Sec. 7.5 y 7.6

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

funciones printf scanf

Lenguaje de programación con JAVA

Tema 3: El Método Simplex. Algoritmo de las Dos Fases.

GRADO EN INGENIERÍA INFORMÁTICA

Transcripción:

Operador de corte (cut): Motivaciones Programación en PROLOG(2) Inteligencia Artificial 2º cuatrimestre de 2009 Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Prolog es un lenguaje de programación altamente declarativo. Para alcanzar esta declaratividad, en ocasiones se paga un alto costo computacional. Los diseñadores del lenguaje incorporaron un operador de corte que permite podar los espacios de búsqueda. 2 Cut (!): Definición formal El operador de corte (cut) es un predicado predefinido tado!. Operacionalmete se define como sigue: La meta! siempre tiene éxito y provoca el descarte de todas las (ramas) alternativas que quedaron pendientes de ser exploradas desde el instante en que se utilizó para resolver la regla conteniendo dicho!. 3 Cut (!): Implicancias de la Definición 1. El cut poda alternativas correspondientes a claúsulas por debajo de él. p:- q,!, r. p:- s, t. 2. El cut poda las soluciones alternativas de la meta conjuntiva a la izquierda del mismo. p:- q, r,!, s, t. 3. El cut permite soluciones alternativas en la meta conjuntiva a la derecha del mismo. p:- q, r,!, s, t. 4 (1) b,!, p (3) (4) q,!, p (5)!, p p fail toma efecto el cut Cut (!): Ejemplo a (2) 1. a: b,!, p. 2. a: r. 3. b: q. 4. b: e. 5. q. 6. r.? a. Poda alternativas correspondientes a: cláusulas por debajo 5 soluciones alternativas a izquierda Aplicaciones Entre sus principales aplicaciones se encuentran: Expresar determinismo. condiciones excluyentes Omitir condiciones. Implementar una forma de negación diferente a la clásica, deminada negación por falla. 6 1

Aplicaciones: expresar determinismo Consideremos un predicado definido de la siguiente forma: p():- c1(),. p():- c2(),. condiciones p():- cn(),. Si las condiciones son mutuamente excluyentes, podemos mejorar la eficiencia colocando un cut luego de cada condición: p():- c1(),!,. p():- c2(),!,. Este último cut es 7 p():- cn(),!,. necesario Aplicaciones: omitir condiciones Consideremos un predicado definido de la siguiente forma: p():- c1(),. p():- c2(),. condiciones p():- cn(),. Si además las condiciones son exhaustivas, podemos omitir la última de ellas al agregar los cuts. p():- c1(),!,. p():- c2(),!,. p():- cn-1(),!,. p():- cn(),!,. 8 Ejemplo Dados dos números naturales X e Y, hallar la diferencia absoluta entre X e Y: dif_abs(x, Y, Z):- X >=Y, Z is X-Y. dif_abs(x, Y, Z):- X < Y, Z is Y-X. Como las condiciones son mutuamente excluyentes,, podemos mejorar la eficiencia utilizando cuts: dif_abs(x, Y, Z):- X >=Y,!, Z is X-Y. dif_abs(x, Y, Z):- X < Y, Z is Y-X. Advertencia El operador de corte debe ser empleado con cuidado y analizando las consecuencias en cada situación. Si se emplea mal puede causar comportamiento poco predecible. Como además las condiciones son exhaustivas, directamente podemos omitir la última de ellas. dif_abs(x, Y, Z):- X >=Y,!, Z is X-Y. Cuidado! Ahora este cut resulta fundamental para 9 dif_abs(x, Y, Z):- Z is Y-X. la correctitud del programa. 10 Negación por falla: t/1 t/1 es un predicado de segundo orden, i.e. recibe como argumento a otro predicado (más precisamente una consulta). t(goal) tiene éxito cuando Goal puede ser probado.?- a. a: b, p. b: e. e.?- t(a).?- member(x, [1,2]). X=1 X=2?- b.?- t(b).?- t(member(x, [1,2])). Implementación del t mediante! y fail La negación por falla (pred. t/1) se define en térmis de los predicados! y fail/0. El único efecto del predicado predefinido fail/0 es fallar. t(goal):- Goal,!, fail. t(_). Comportamiento de t/1: Si la meta Goal se satisface, se dispara la poda y t(goal) falla. Caso contrario, si la meta Goal falla, el cut se ejecuta y naf(goal) se satisface. 12 2

Predicados all-solutions: findall/3 findall(+term, +Goal, -ListOfTerms) pred. de 2do orden Retorna en ListOfTerms la lista de todas las instanciaciones de Term correspondientes a soluciónes alternativas (en virtud del backtracking) de la meta Goal. Ejemplos:?- findall(x, member(x,[1,2,3]), Rta). Rta = [1,2,3]?-findall(s(X,Y),(member(X,[1,2,3]),Y is X+1),Rta). Rta = [s(1, 2), s(2, 3), s(3, 4)] 13 findall/3: Ejemplo El producto cartesia entre dos conjuntos A y B (AxB) es el conjunto de todos los pares (Ea,Eb) tal que Ea pert. A y Eb pert. B. Definir un predicado prod_cart/3 que dados dos conjuntos A y B retorne AxB, el producto cartesia entre A y B.?- prod_cart([1,2], [a,b,c], Rdo). Rdo = [[1,a],[1,b],[1,c],[2,a],[2,b],[2,c]] 14 Predicados all-solutions: forall/2 forall(+ant, +Cons) Tiene éxito si para todas las soluciones alternativas de Ant (antecedente) se verifica Cons (consecuente). Ejemplo de uso del forall/2 lista_num_pares(+l) Tiene éxito si L es una lísta conteniendo números pares.?- lista_num_pares([2,4,5]).?- lista_num_pares([2,4,6]). 15 prod_cart(a, B, AxB):- findall([ea,eb], (member(ea,a),member(eb,b)), AxB) lista_num_pares(l):- forall(member(x,l), 0 is X mod 2). 16 Ejemplo de uso del forall/2 seguidos(x,y,l) Tiene éxito si Y está inmediatamente después que X en la lista L. seguidos(x,y, [X,Y _RestoL]). ordenada(+l) Dada una lista de números L, determina si se encuentra ordenada (de mer a mayor). seguidos(x,y, [_Z RestoL]): Z RestoL]):- seguidos(x,y,restol). ordenada(l):- forall(seguidos(x,y,l), X<Y). 17 Manipulación de estructuras Hay predicados especiales para analizar la estructura de térmis compuestos.?- h(a,g(x),8) =.. L. =../2 ejemplo L = [h, a, g(x), 8] compound/1 ejemplo?- T =.. [f, a, b]. T = f(a,b).?- compound(a).?- compound(f(a)). 18 3

Manipulación de estructuras functor/3 ejemplo?- functor (h(a,g(x),8), Functor, Aridad). Functor = h Aridad = 3 SWI-PROLOG ofrece toda una familia de predicados que permiten agregar y quitar dinámicamente hechos y reglas del programa, es decir, permiten modificar dinámicamente definiciones de predicados. assert(+term) arg/3 ejemplo?- arg (2, h(a,g(2),8), SegArg). SegArg = g(2) recibe como argumento un térmi representando un hecho o regla y lo agrega al programa. Term se agrega como último hecho o regla del predicado correspondiente. 19 20?- assert(mentiroso(juancito)).?- assert(mentiroso(juancito)).?- assert(mentiroso(leo)), fail. 21 22?- assert(mentiroso(juancito)).?- assert(mentiroso(x):- juegabientruco(x)).?- assert(mentiroso(leo)), fail. El backtracking deshace el efecto colateral provocado por el assert. 23 24 4

?- assert(mentiroso(x):- juegabientruco(x)). retract(+term) Quita del programa el primer hecho o regla que unifique con Term. Responde si tal hecho o regla existe. Aclaración: Term puede ser simplemente una variable. 25 26?- retract(mentiroso(leo)).?- retract(mentiroso(leo)). 27 28 Otros predicados de la misma familia: asserta(+term): equivalente a assert/1 sólo que Term se agrega como primer hecho o regla del predicado correspondiente.?- retract(mentiroso(y)). pido solución Y=jaimito ; Y=juancito ; pido solución La exploración de soluciones alternativas tiene 29 efectos colaterales!!! retractall(+head): quita del prog. todas las cláusulas (hechos y reglas) cuyas cabezas unifiquen con Head. abolish(+predname, +Arity): quita del programa todas las cláusulas (hechos y reglas) del predicado PredName de aridad Arity. 30 5

mentiroso(x):- jbientruco(x). retractall vs. retract mentiroso(x):- jbientruco(x). jbientruco(pablo). jbientruco(pablo). dynamic +Name/+Arity Informa al intérprete que la definición del predicado puede cambiar durante la ejecución (usando assert/1 y/o retract/1).?- retractall(mentiroso(x)).?- retract(mentiroso(x)). pido solución X=jaimito ; X=juancito ; pido solución Su utilidad tiene que ver, principalmente, con el control de acceso concurrente y la compilación de predicados. 31 32 Además, como ayuda al programador, el intérprete del SWI diagstica el error predicado indefinido frente a una consulta a un predicado que posee reglas ni hechos en el programa. Ejemplo: p(a). p(x):-q(x).?- r(b). ERROR: Undefined procedure: r/1?- dynamic r/1.?- r(b). Este mensaje, en lugar de un, resulta de gran ayuda para detectar errores en mbres de predicados, cometidos accidentalmente. Si hubiésemos declarado a r/1 como dinámico, entonces la respuesta del intérprete sería simplemente, ya que sabe que se trata de un 33 predicado dinámico que posee reglas o hechos en ese momento. Invocando metas: call/1 call(+goal) Invoca la meta Goal/ realiza la consulta por Goal.?- call(member(2,[1,2])). (,?- call(member(x,[1,2])). X=1 ; X=2 ; 34 Flexibilidad de PROLOG Flexibilidad de PROLOG: Ejemplo La combinación de los siguientes elementos brinda mucha flexibilidad: la capacidad de invocar metas (call/1) y de agragar y quitar hechos y reglas (assert/1 y retract/1) en forma dinámica, donde tanto metas, hechos y reglas se representan mediante estructuras. las facilidades para manipular (descomponer, construir, analizar) estructuras (=../2) 35 suma(x,y,rdo):- Rdo is X+Y. resta(x,y,rdo):- Rdo is X-Y. pot(x,y,rdo):- Rdo is X^Y. operar(op,a,b,rdo):- invocación de la consulta construcción de una estructura representando una consulta AOpB =..[Op,A,B,Rdo], call(aopb).?-operar(pot,2,3, Rdo). Rdo=8 36 6

Carga de un archivo.pl Carga de un archivo.pl consult(+file) Recibe como argumento el path de un archivo conteniendo código PROLOG, y lo carga en la base de datos del intérprete. Un archivo.pl puede contener cláusulas especiales de la forma :- Goal. Goal se invocará automáticamente cuando se consulte el archivo. La cláusula :-Goal puede ser útil para invocar predicados de inicialización o declarar predicados como dinámicos. Ejemplo: programa.pl :- setup. :- dynamic p/1, q/2. setup:- p(a). q(b). 37 38 Más info sobre estos predicados y otros: On Line Manual del SWI PROLOG FIN 39 7