1 / 37

PROLOG Programación Lógica

PROLOG Programación Lógica. Mar Mejía Murillo. CONTENIDO. Introducción Sintáxis Tipos Expresiones Unificación Funciones Listas Iteración Backtracking. Aplicaciones. Negación y Cortes Cláusulas de Gramáticas definidas Estructuras de datos incompletas Programación de Meta Nivel

abla
Download Presentation

PROLOG Programación Lógica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. PROLOG Programación Lógica Mar Mejía Murillo

  2. CONTENIDO • Introducción • Sintáxis • Tipos • Expresiones • Unificación • Funciones • Listas • Iteración • Backtracking • Aplicaciones • Negación y Cortes • Cláusulas de Gramáticas definidas • Estructuras de datos incompletas • Programación de Meta Nivel • Programación de Segundo Orden • Bases de Datos • Sistemas Expertos • Programación Orientada a Objetos

  3. INTRODUCCIÓN Programas lógicos y cómputos Programa lógico (o relacional): conjunto de hechos y reglas que definen relaciones entre objetos Cómputo: deducción de que un objetivo O es consecuencia lógica de las relaciones definidas en un programa lógico P P -> O

  4. INTRODUCCIÓN Objetos, relaciones y objetivos Objetos: se corresponden con los datos se representan mediante términos Relaciones: se corresponden con los procedimientos se definen mediante hechos y reglas Objetivos: se corresponden con el programa principal se definen mediante consultas

  5. INTRODUCCIÓN • ¿Cómo se escribe un programa lógico? • Para escribir un programa lógico debemos identificar: • qué objetos intervienen en el problema, • cuáles son las relaciones entre éstos, y • qué objetivos queremos alcanzar • Una vez identificados los elementos anteriores debemos: • representar los objetos mediante términos • definir las relaciones mediante hechos y reglas • definir los objetivos mediante consultas

  6. INTRODUCCIÓN Problema: escribir un programa lógico que defina relaciones de parentesco y deduzca qué personas están emparentadas Antonio María Elena Carlos Eva David Fernando Silvia Emilio

  7. INTRODUCCIÓN Identificando objetos y relaciones OBJETOS RELACIONES Antonio María Elena Carlos Eva David Fernando Silvia Emilio

  8. INTRODUCCIÓN La familia completa definida en Prolog padre(antonio,carlos). padre(antonio,eva). padre(carlos,fernando). padre(carlos,silvia). padre(david,emilio). madre(maría,carlos). madre(maría,eva). madre(elena,fernando). madre(elena,silvia). madre(eva,emilio).

  9. INTRODUCCIÓN Deduciendo objetivos Objetivos: son preguntas sobre el parentescodefinidas mediante consultas Ejemplos: ¿es David padre de Emilio? :- padre(david,emilio). ¿quiénes son los hijos de Eva? :- madre(eva,X). ¿quién es el padre de Silvia? :- padre(P,silvia).

  10. INTRODUCCIÓN Identificando Relaciones implícitas TIO ABUELO Antonio María Elena Carlos Eva David Fernando Silvia Emilio PRIMOS HERMANOS

  11. INTRODUCCIÓN • Una mala idea... • Definimos las relaciones extra mediante hechos: • hermanos(carlos,eva). • hermanos(fernando,silvia). • Inconvenientes: • tamaño excesivo • propenso a errores • mantenimiento (nacimientos, etc.) • adaptabilidad a otras situaciones (familias) • Sería preferible definir esta relación de forma genérica,identificando las condiciones bajo las cuales dos personas “A” y“B” son hermanos

  12. INTRODUCCIÓN Definiendo relaciones mediante reglas ¿Cómo podemos definir la relación “hermanos”? “A y B son hermanos si comparten los padres” Definiremos la relación condicional anterior mediante la regla: hermanos(A,B) :- padre(P,A), madre(M,A), padre(P,B), madre(M,B), A \== B.

  13. INTRODUCCIÓN Reglas para identificar objetos y relaciones Objetos: nombres propios y comunes, en singular o plural Relaciones: verbos y formas verbales A veces es posible más de una formalización, y la diferencia entreobjeto y relación no está clara... Una relación determina un conjunto de objetos: aquéllos que la satisfacen. Por tanto, una relación puede emplearse para referirnos a estos objetos. Ejemplo: “Los hijos de Antonio” :- padre(antonio,H)

  14. INTRODUCCIÓN Datos: objetos y términos Los objetos (datos) se representan mediante términos: átomo entero constante número real término variable estructura

  15. INTRODUCCIÓN • Átomos • Uso: • representan objetos concretos mediante un nombre; esdecir, denominan a un objeto en particular • Sintaxis: • secuencias de letras, dígitos y _ comenzando por minúscula • ejemplos: antonio, x, lista_vacía, x25 • secuencias de caracteres entre apóstrofes • ejemplos: ‘antonio garcía’, ‘Antonio’ • secuencias de símbolos especiales • ejemplos: +, -, ===, ::=, :=, <->

  16. INTRODUCCIÓN Números Uso: representan números enteros y reales Sintaxis: enteros: 2, 34, -56 reales: -0.0092, 4.5e-5 Se aplican las restricciones típicas de rango (enteros y reales) yprecisión (reales)

  17. INTRODUCCIÓN • Variables • Uso: • representan objetos porsemejantes a incógnitas: no se les puede asignar valores a voluntad. • Sintaxis: • Secuencia de letras, dígitos y _ comenzando por mayúscula o _ • Ejemplos: • X1 • Padre • _X • Num_Telef • ListaClientes

  18. INTRODUCCIÓN NOMBRE Estructuras Uso: representan objetos compuestos que pueden ser concretos (no contienen variables) o por determinar (contienen variables) Sintaxis:átomo(término1,...,términon) Ejemplos: fecha(17,agosto,2001) % fecha/3 cita(silvia,fecha(Día,enero,2002)) % cita/2 Al par nombre/aridad se le denomina functor de la estructura Sin espacios ARIDAD

  19. INTRODUCCIÓN Estructuras El “tipo” de una estructura está determinado por su functor: fecha/3, cita/2 Puede emplearse el mismo nombre con diferentes aridades: se trata de functores distintos Ejemplo: fecha(17,agosto,2001) % fecha/3 fecha(14,abril) % fecha/2

  20. INTRODUCCIÓN • Sintaxis (simplificada) de los términos • término ::= átomo • | número • | variable • | estructura • estructura ::= átomo(argumentos) • argumentos ::= término • | término , argumentos

  21. INTRODUCCIÓN • Prolog comprueba la sintaxis de los términos... • detecta y señala los siguientes errores sintácticos: • 2pi • fecha(12,,2001) • cita(fernando,fecha(2,diciembre,2001)

  22. INTRODUCCIÓN Pero la intención es lo que cuenta... La intención es representar las fechas por términos de la forma: fecha(día,mes,año) donde día pertenece a {1,...,31} mes pertenece a {enero,...,diciembre} año pertenece a {2000,...} Pero Prolog no puede detectar usos inadecuados: fecha(enro,2,2001) La sintaxis es correcta, pero el orden de los argumentos no es el esperado y enro no es un mes válido Prolog no conoce las intenciones del programador: no hay declaraciones de tipo

  23. INTRODUCCIÓN

  24. INTRODUCCIÓN • ¿Cómo se representa un objeto en Prolog? • El programador lógico debe decidir una sintaxis adecuada para • cada tipo de dato: • Constantes: • qué nombre o número resulta apropiado • Variables: • se emplean para objetos por determinar (plantillas) • Estructuras: • functor • orden y sintaxis de los argumentos, recursión. • Sin embargo, no hay forma de comunicar a Prolog esta intención: • no hay declaraciones de tipo

  25. INTRODUCCIÓN Ejemplo: representación de pilas Para representar el TAD pila, el programador debe elegir una sintaxis adecuada: Sintaxis: tad_pila ::= pila_vacía | pila(cima,tad_pila) cima::= término Pero no es posible comunicar a Prolog esta sintaxis...

  26. INTRODUCCIÓN Ejemplos de pilas bien formadas: pila(a,pila(b,pila(c,pila_vacía))) pila(a,pila(fecha(2,enero,2001),pila_vacía)) pila(pila_vacía,pila_vacía) Ejemplos de términos Prolog que no son pilas bien formadas: pila(pila_vacía) pila(a,pila(b))

  27. INTRODUCCIÓN Las estructuras que contienen variables son plantillas: Ejemplos: pilas con 2 elementos y a en la cima pila(a,pila(X,pila_vacía)) pilas de 3 elementos cualesquiera pila(X,pila(Y,pila(Z,pila_vacía))) pilas de al menos un elemento pila(X,Y) pilas que tienen una b como segundo elemento pila(X,pila(b,Y)) Las dos últimas plantillas suponen que Y es una pila

  28. INTRODUCCIÓN CIRCUITOS DIGITALES • Objetos: • variables de entrada (a,b,c,...,x,y,z) • puertas lógicas (or, and, nand, not)

  29. INTRODUCCIÓN Representación: entradas -> átomos puertas -> estructuras or/2,and/2,nand/2,not/1 Sintaxis: circuito::= entrada | or(circuito, circuito) | and(circuito, circuito) | nand(circuito, circuito) | not(circuito) entrada ::= átomo Queda: or(and(x,y),z)

  30. INTRODUCCIÓN Representando términos mediante árboles Un término Prolog puede representarse como un árbol: constantes y variables ->hojas estructuras n-arias -> nodos n-arios Ejemplo: cita(silvia,fecha(Día,diciembre,2001)) cita silvia fecha Día diciembre 2001

  31. INTRODUCCIÓN Procedimientos: relaciones entre objetos Los procedimientos en programación lógica se denominan Relaciones Cada procedimiento tiene un nombre y una aridad que lo identifican de manera unívoca “X es padre de Y” -> padre(X,Y) -> padre/2 “la pila P es vacía” -> es_vacía(P) -> es_vacía/1

  32. INTRODUCCIÓN • Los procedimientos pueden satisfacerse o fracasar • padre(antonio,eva) -> éxito • es_vacía(pila(x,pila(Y,pila_vacía)))-> fracaso • Los procedimientos no devuelven valores • padre(antonio,padre(carlos,silvia)) -> error • lo anterior no expresa que antonio es abuelo de silvia. • Las llamadas anidadas no se ejecutan: son argumentos (datos) • Los procedimientos se definen mediante un conjunto de hechosy reglas

  33. INTRODUCCIÓN Definiendo hechos Uso: definen relaciones incondicionales Sintaxis:átomo. átomo(término1,...,términon). Ejemplos: padre(antonio,eva). % padre/2 es_vacía(pila_vacía). % es_vacía/1 es_par(8). % es_par/1 no_es_vacía(pila(Cima,Resto)). % no_es_vacía/1

  34. INTRODUCCIÓN Definición de Reglas Conclusión cierta si se satisfacen TODAS las condiciones

  35. INTRODUCCIÓN “Los caballeros rescatan a las princesas secuestradas por dragones” procedimiento rescata/2: rescata(C,P) :- es_caballero(C), es_princesa(P), es_dragon(D), secuestrada(P,D).

  36. INTRODUCCIÓN Las variables son locales a los hechos y reglas “P es un pato si tiene plumas y hace cuac, o si es sobrino de un pato” procedimiento es_pato/1: es_pato(P) :- tiene_plumas(P), hace_cuac(P). es_pato(P) :- es_pato(T), sobrino(P,T). Las variables no son locales a los procedimientos

  37. INTRODUCCIÓN Los procedimientos pueden ser recursivos “X es progenitor de Y si es su padre o su madre” procedimiento progenitor/2: progenitor(X,Y) :-padre(X,Y). progenitor(X,Y) :-madre(X,Y). “X es antepasado de Y si es su progenitor o progenitor de uno de sus antepasados” procedimiento antepasado/2: antepasado(X,Y) :-progenitor(X,Y). antepasado(X,Y) :-progenitor(X,Z), antepasado(Z,Y).

More Related