I.A. Listas en Prolog Parte II.

Slides:



Advertisements
Presentaciones similares
I.A. Listas en Prolog.
Advertisements

Diseño y análisis de algoritmos
Compiladores e intérpretes Análisis Sintáctico II
REDES SEMANTICAS Y BUSQUEDAS
ALGORITMOS Y LENGUAJES Estructuras de Control CONDICIONAL
Curso de Microsoft® Access® 2010
Enlaces con variables en la URL en PHP Programación en Internet II.
PORTAL WEB Manual de Usuario Perfil Autorizador
LÓGICA DE PROGRAMACIÓN
METODO DE ANALISIS DE FALLAS
Elementos de Pascal Escribir un programa en Pascal que lea los valores de los catetos de un triángulo rectángulo y calcule y muestre la hipotenusa. program.
Resolución de Problemas Algoritmos y Programación
Sistemas de Razonamiento Lógico
Concepto de programa. Directorio Concepto de programa. Analisis del problema. Resolucion del problema. Desarroollo de un programa. Partes constitutivas.
Informática II Prof. Dr. Gustavo Patiño MJ
Programación 1 Introducción
5. Entrada y Salida en PROLOG
6. Operadores en PROLOG Definición de operadores propios
ANALISIS SINTACTICO DESCENDENTE
DESCRIPCION DEL PROBLEMA
Firma y Certificado Digital Angel Lanza Carlos Garcia.
Objetivos Específicos de la Unidad
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Guía Consulta De Resultados
Prolog PROgramming in LOGic
Prolog Se orienta a la solución de problemas que pueden ser expresados en forma de objetos y relaciones. La programación en Prolog consta de: Hechos.
Inteligencia Artificial Gonzalo Villarreal Farah
L. Enrique Sucar/Eduardo Morales
PROGRAMACIÓN LÓGICA.
Answering Queries Using Views (Levy, Mendelzon, Sagiv, Srivastava) Javier López C.
Tema 7. Introducción a lenguaje de programación Visual Basic (clase 1)
Departamento de Referencia CPICM_C [Hoja Informativa No. 8; 2012]
La evaluación de la lectura en el proyecto PISA 2009.
Manual de Ayuda para el usuario del ing Explorer.
BASE DE DATOS BY: Julián Villar Vázquez.
Apuntes de Matemáticas 2º ESO
Resolución de Problemas y Algoritmos Uso de iteración con secuencias
Descomposición Factorial Unidad 5
Aplicación de estructuras de datos
Control de errores visual basic
“Los usuarios y sus características”
Si usted visita el sitio directamente usted podrá ver la página a continuación. Si usted sigue el vínculo desde.
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 13/05/2006.
MATEMÁTICAS 3º DIVERSIFICACIÓN
Unidad 1: FUNDAMENTOS DE COMPUTACIÓN Y PSEUDOLENGUAJE
Sabemos reconocerlas, y calcularlas como soluciones de sistemas de ecuaciones, o de desigualdades Buscamos métodos de cálculo generales y eficientes Problemas.
Resolución de Objetivos Se recorren las reglas de arriba abajo y de izquierda a derecha Buscamos hechos o cabezas de reglas que unifiquen con la meta actual.
TEMA 2: DIAGRAMAS DE FLUJO
Estrategias de Comprensión
Términos algoritmo diseñar algoritmo implementar algoritmo
Programación Básica con “NQC” Pedro F. Toledo – Patricio Castillo 15/08/2006.
ALGORITMO QUE ES ??.
Argumentos Deductivos e Inductivos
Elaboración de algoritmos usando lógica de programación
GUIA para la adscripción de centros o grupos de trabajo promotores y registro de experiencias en la Red de Experiencias de Educación para la Salud en la.
Lic. Carla Aguirre Montalvo
Para aplicaciones.   Una variable es un espacio de memoria en donde se almacenan datos 1. VARIABLES.
Matemáticas Discretas MISTI
Taller practico de 8vo básico
¿Cómo programar un Botón para agregar registros a una base de datos?
LECCIÓN 3.- LECTURA. A).-“TIPOS DE LECTURA. LECCIÓN 3.- LECTURA. A).-“TIPOS DE LECTURA. Revisión rápida. Es una búsqueda rápida de un punto importante,
Web y Multimedia II Integrantes: Piero Álvarez Mayra Atience Jhonney Bermeo Johanna Cabrera Gabriela Cango.
Como usar Power point.
¿Qué ES UNA BD?  Una base de datos es como un almacén en el que se guarda y organiza diferente tipo de información, pero en el computador. Las bases.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Lenguaje ensamblador Resumen en diapositivas
Módulo III.- Recursos en UPSA VIRTUAL Este módulo explica como configurar los distintos recursos que pueden encontrarse en un curso de MOODLE. Recurso:
PÁGINA WEB, SITIO WEB Y PORTAL WEB Una página web tradicionalmente hace relación a un documento en el internet, disponible para ser leído, con información.
Omar Herrera Caamal Rigoberto Lizárraga Luis Cetina Luna.
MATEMÁTICA Propiedad Intelectual Cpech Clase Funciones: conceptos generales PPTC3M037M311-A16V1.
Transcripción de la presentación:

I.A. Listas en Prolog Parte II

Sección Domains Tiene básicamente 2 propósitos: Dar nombres significativos a los dominios, a pesar de que internamente sean los mismos dominios que ya existen. Declarar dominios que no son estandares.

Ejemplo Francisco es un varón de 30 años. Podría presentarse por el predicado: persona(francisco,varon,30). El predicado persona se hubiera declarado en la sección predicates de la siguiente forma: persona(symbol,symbol,integer) Ejemplo: domains nombre, sexo = symbol edad = integer predicates persona(nombre,sexo,edad)

Aridad Múltiple La aridad de un predicado es el número de argumentos que utiliza. Se puede tener dos predicados en el mismo nombre pero diferente aridad y por tanto diferente significado.

Ejm domains persona=symbol predicates padre(persona) %persona es el padre padre(persona,persona) %primera persona es padre de la segunda persona clauses padre(alejandro,zarahi). padre(marco,alejandra). padre(luis,pedro). padre(P):-padre(P,_). %regla que reemplaza a la definición particular goal padre(P,H). %cada padre con su respectivo hijo

P=alejandro, H=zarahi P=marco, H=alejandra P=luis, H=pedro 3 Solutions padre(P) establece una particularidad padre(P,_) establece un propiedad o regla

goal padre(P,_). %quienes son padres o padre(P). %quienes son padres

P=alejandro P=marco P=luis 3 Solutions

Unificación Visual Prolog busca soluciones de arriba a bajo. Cuando encuentra una cláusula que coincide con la consulta u objetivo, instancia valores para las variables libres de tal forma que la meta y la cláusula se hacen idénticas. A este evento se denomina unificación.

domains titulo,autor=symbol paginas=integer predicates libro(titulo,paginas) escrito_por(titulo,autor) novela_larga(titulo) clauses libro("María",120). libro("La Iliada",300). escrito_por("María","Isaacs"). escrito_por("La Iliada","Homero"). novela_larga(Tit):-libro(Tit,Pag),Pag>150. %novela larga si cumple goal escrito_por(T,A).

T=María, A=Isaacs T=La Iliada, A=Homero 2 Solutions Primero busca en cláusulas que los predicados sean iguales, escrito_por, a partir de la tercera cláusula. La meta y la clausula han sido unificadas: T a instanciado el valor “María” y A instanciado el valor “Isaacs”. A continuación el Prolog sigue buscando, libera las variables y continua buscando, luego las variables se vuelven a instanciar T=La Iliada, y A=Homero, por lo tanto reporta 2 soluciones.

goal novela_larga(X). X=La Iliada 1 Solution Objetivo es novela_larga(X), el Prolog, comienza a busca en las clausulas, coincide con la regla, vincula X con Tit, por lo tanto la novela es larga si cumple, por ello analiza si cumple los sub objetivo de izquierda a derecha: libro(Tit,Pag) ubica e instancia los valor a las variables Tit<-“María” y Pag<- 120,

Pag > 150 ; 120>150 falso, por lo tanto rechaza lo ubicado, liberando las variables para otro proceso de búsqueda. libro(Tit,Pag) ubica otro e instancia los valor a las variables Tit<-“La Iliasda” y Pag<- 300, Pag > 150 ; 300>150 verdad, por lo tanto el cuerpo de la regla se hace verdadero, por lo tanto la cabecera también se hace verdadera. Prolog remite como solución a La Iliada dado que X=Tit.

Vuelta Atrás (BackTraking) Para encontrar soluciones, Visual Prolog utiliza una técnica llamada “Backtracking” que consiste en probar diferentes caminos si fracasa en uno de ellos, regresa a un nivel anterior y prueba con otro.

Cuando inicia un intento para satisfacer un objetivo, comienza desde la primera cláusula en búsqueda de una coincidencia.

Cuando una nueva llamada se produce, la búsqueda para esa llamada también comienza desde la primera cláusula. Una vez que una variable ha sido instanciada, la única forma de liberarla es a través de la vuelta atrás

En objetivos compuestos, sólo se pasa al siguiente sub objetivo si el anterior ha sido exitoso. Obj:-obj1,obj2,obj3,obj4, trata de cumplir los objetivo de izquierda a derecha, tendría que ir cumpliendo objetivo x objetivo.

predicates gusta(symbol,symbol) sabe(symbol,symbol) comida(symbol) clauses comida(tallarin). comida(estofado). sabe(tallarin,mal). sabe(estofado,bien). gusta(juan,X):-comida(X),sabe(X,bien). goal gusta(juan,C). C=estofado 1 Solution

Primera Busqueda gusta(juan,C) gusta(juan,X) comida(X) Comida(tallarin) [V] sabe(X,bien) tallarin, bien [F]

Segunda Busqueda gusta(juan,C) gusta(juan,X) comida(X) Comida(estofado) [V] sabe(X,bien) estofado, bien [V]

Predicado FAIL Prolog inicia la vuelta atrás cuando una llamada falla. Se utiliza el predicado “fail” para producir una falla y por ende forzar a que se realice la vuelta atrás, en busca de otras soluciones. Ejemplo a)

Ejemplo 13 domains nombre=symbol predicates padre(nombre,nombre) todos clauses padre(leonardo,katty). padre(carlos,jaime). padre(carlos,maria). todos:-padre(X,Y),write(X,"es padre de",Y,"\n"). (regla) goal padre(X,Y). X=leonardo, Y=katty X=carlos, Y=jaime X=carlos, Y=maria 3 Solutions

La idea es que el prolog buscará todas las condiciones que cumplan Ejemplo b) goal todos. leonardo es padre de katty yes La idea es que con goal todos, una vez que cumple la regla el prolog para la búsqueda.

Forzando a una falla Ejemplo c) todos:-padre(X,Y),write(X," es padre de ",Y,"\n"),fail. goal todos. leonardo es padre de katty carlos es padre de jaime carlos es padre de maria no -> porque a fallado al final.

Ejemplo d) todos:-padre(X,Y),write(X," es padre de ",Y,"\n"),fail. todos. goal leonardo es padre de katty carlos es padre de jaime carlos es padre de maria yes

Corte Se usa para evitar la vuelta atrás. Se representa por !

Una vez que el corte ha sido ejecutado, es imposible volver atrás en las submetas ubicadas antes del corte en la cláusula que esta siendo procesada y tampoco es posible volver atrás a otros predicados similares al que se está ejecutando.

Regla: r:-a,b,!,c,d,e. Una vez que verificado los predicados o submetas a,b pasa por el corte y comienza a ver los predicados c,d,e, no pudiendo regresar a verificar los predicados a y b, ni mucho menos a la regla r.

Ejm predicates amigo (symbol,symbol) mujer(symbol) gusta(symbol,symbol) clauses mujer(maria). mujer(juana). mujer(susana). gusta(javier,futbol). gusta(benjamin,susana).

Goal amigo(benjamin,X). amigo(benjamin,juana):-mujer(juana),gusta(benjamin,juana),!. amigo(benjamin,javier):-!,gusta(javier,futbol),!. amigo(benjamin,susana):-mujer(susana). Goal amigo(benjamin,X).

X=javier 1 Solution

Otro ejemplo predicates literal(byte) clauses literal(X):-X=1,write(X," = uno \n"). literal(X):-X=2,write(X," = dos \n"). literal(X):-X=3,write(X," = tres \n"). literal(X):-write(X," = sorpresa \n"). goal literal(1).

1 = uno yes

literal(X):-X=1,write(X," = uno \n"),fail. Solucion: 1 = uno Agregando literal(X):-X=1,write(X," = uno \n"),fail. Solucion: 1 = uno 1 = sorpresa yes

Listas Ejemplos

Ingreso de datos en una lista domains i=integer li=i* predicates nondeterm ingreso(i,li) nondeterm leer clauses ingreso(0,[]). ingreso(N,L):- N1=N-1, ingreso(N1,L1), write("Ingrese Numero= "), readint(E), L=[E|L1]. leer:- write("Ingrese N= "),readint(N),N>0, ingreso(N,L), write("Lista ","\n",L),nl. goal leer, readln(_).

Dominios Complejos en Prolog

Se denominan también a los dominios complejos estructuras de datos definidas por el usuario, por ejm podría definir el dominio estándar INTEGER pero si quisiera definir un dominio ENTERO el compilador no sabia de que se trata si antes no lo defino previamente.

Cada sección de dominios debe comenzar con la palabra DOMAINS. Ejemplo: ENTERO = INTEGER

El formato es como sigue: dominio = [reference] [align {byte|word|dword}] declaracion1;[declaracion2];... dominio: nombre especificado por el usuario. declaracion1; [declaracion2]: declaración de objetos compuestos alternativos que tienen que tener la forma siguiente: functor([sub_1 [, sub_2, ...] ])

donde functor es el nombre del objeto compuesto alternativo. sub_1 [,sub_2, ...] son subcomponentes del objeto compuesto que deben tener su correspondiente nombre y dominio. Este último puede ser estándar o definido por el usuario.

reference: indica la declaración de un dominio de referencia reference: indica la declaración de un dominio de referencia. En este tipo de dominios los argumentos de entrada pueden ser variables libres. align: indica el tipo de distribución de memoria que se va a usar.

Ejmplo DOMAINS LECTOR = lee(SYMBOL Nombre, LECTURA Item) LECTURA = libro(SYMBOL Autor, SYMBOL Titulo, SYMBOL Editorial); revista (SYMBOL Titulo, INTEGER Numero)