La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

L. Enrique Sucar/Eduardo Morales

Presentaciones similares


Presentación del tema: "L. Enrique Sucar/Eduardo Morales"— Transcripción de la presentación:

1 L. Enrique Sucar/Eduardo Morales
INTRODUCCIÓN a PROLOG L. Enrique Sucar/Eduardo Morales Introducción Prolog = programación en lógica Es un lenguaje simbólico-asignar símbolos a objetos y manipularlos. Basado en las ideas de ver la programación como un “probador de teoremas” en lógica: Programa=conjunto de axiomas(hechos,reglas) Computación=prueba de teoremas(meta,pregunta) Entonces la idea es “declarar” lo que es verdadero y a partir de ello “probar” cierta meta.

2 Podemos ver un programa en Prolog como la representación de una serie de objetos (átomos) y relaciones entre estos objetos (predicados). Ejemplos: El libro le pertenece a Juan - pertenece(juan,libro) Juan es el padre de María - padre(juan,maría) Además de describir relaciones “directas” (hechos) entre objetos, podemos definir reglas para obtener nuevas relaciones. Todo lo que le pertenece a Juan también le pertenece a María. Dos personas son hermanas si son mujeres y tienen los mismos padres.

3 Dada una serie de hechos y reglas, podemos hacer preguntas sobre otras relaciones. Prolog determina si esta relación desconocida es válida a partir de los hechos y reglas en el programa. Un programa en Prolog consiste de 3 partes principales: 1. Hechos- relaciones conocidas entre objetos 2. Reglas- como obtener nuevas relaciones a partir de las conocidas 3. Preguntas- relación que deseamos conocer

4 Por ejemplo (por ahora solo con hechos):
papa(fuhed,luis). mama(aida,luis). papa(fuhed,rico). papa(luis,edgar). papa(fuhed,bety). papa(fuhed,shafy). ?papa(luis,edgar). YES. ?mama(luis,maría). NO.

5 Variables Además de representar objetos específicos, podemos usar símbolos que pueden representar diferentes objetos(pueden ser asignados diferentes valores).Estas son variables en Prolog. En Prolog una variable se indica iniciando con mayúsculas (X,Y, Persona,….). Las variables representan cualquier objeto y se usan dentro de los predicados (NO como nombres de predicados). Por ejemplo, si a Juan le pertenece “algo” pertenece(juan,X).

6 % familia - hechos: m(luis). m(rico). m(fuhed). m(edgar). f(aida). f(bety). f(shafy). papa(fuhed,luis). mama(aida,luis). papa(fuhed,rico). papa(luis,edgar). papa(fuhed,bety). papa(luis,shafy). papa(jesus,fuhed).

7 % reglas: abuelo(X,Z):-papa(X,Y),papa(Y,Z). abuelo(X,Z):-papa(X,Z),mama(Y,Z). La “,” representa una conjunción (Y). Es decir que hay que probar ambas submetas para probar la meta representada por la regla.

8 Negación-en Prolog se implementa por lo que se conoce como negación por falla, es decir que si algo no se puede probar se considera falso. La disjunción (O) se puede implementar mediante dos reglas con la misma meta. También se puede tener reglas recursivas, en las que una submeta es el misma meta (debe haber una condición de terminación). Esto se ilustra en el resto del ejemplo de la familia: hermano(X,Z):-papa(Y,X),papa(Y,Z),not(Y=Z). tio(X,Z):-m(X),papa(Y,Z),hermano(X,Y). tia(X,Z):-f(X),papa(Y,Z),hermano(X,Y). proj(X,Y):-papa(X,Y). proj(X,Y):-mama(X,Y). ancestro(X,Z):-proj(X,Y). ancestro(X,Z):-proj(X,Y),ancestro(Y,Z).

9 Estructuras Las estructuras básicas en Prolog son las cláusulas o predicados. Función(componente1,componente2) Los componentes también pueden ser funciones: función(componente1,función2(componente2)) Ejemplo: papa(hermano(luis),juan). Aritmética comparaciones: =, <, >, =>, =<, /= (resultado binario) operaciones: +, -, *, /, mod (números enteros) X is A <op> B (“X” debe ser una variable no instanciada)

10 Listas Una lista es un arreglo ordenado de elementos cuya longitud (número de elementos) es variable. En Prolog se representa con una serie de elementos separados por “,” entre paréntesis cuadrados. Ejemplo: [a,b,c] [ ] - lista vacia [a,[b,c],d] - un elemento puede ser a su vez una lista Las listas se manipulan especificando su "cabeza" (Head - primer elemento), y "cola" (Tail - lista del resto de los elementos), con la siguiente notación: [ H | T ]

11 Ejemplos: [a,b,c] - H = a, T = [b,c] [a] - H = a, T =[] [[b,c],d] - H = [b,c], T = [d] [ ] - H = fail, T = [ ] A continuación veremos algunas operaciones importantes con listas. % inserta un elemento al inicio de una lista: inserta(E,Li,Lf):-Lf=[E|Li]. % inserta mejorado: inserta2 (E,Li, [E | Li]).

12 % match. match([ ] ,[ ]). match([Hl|T1],[H2|T2]):-Hl=H2, match(Tl,T2). % concatena 2 listas (para búsqueda): agrega([ ],L,L). agrega([H|L1],L2,[H|L3]):- agrega(L1,L2,L3).

13 Búsqueda A continuación veremos la implementación de los algoritmos de búsqueda sin información (por profundidad y a lo ancho). Para ilustrarlo usamos un juego sencillo llamado "4 puzzle". Rutina general de búsqueda: busca(NI,NF):- encuentra([N1] NF). encuentra([NF |_],NF). encuentra(Agenda, NF):- n-agenda(Agenda, Nagenda),write(Nagenda),nl, encuentra(Nagenda,NF).

14 Por profundidad: n-agenda([NI|Agenda], Nagenda):- expande(NI, Nodos), agrega(Nodos, Agenda, Nagenda). A lo ancho: agrega(Agenda, Nodos, Nagenda).

15 Expande para el 4-puzzle:
expande([s,X,Y,Z], [[X,s,Y,Z],[Y,X,s,Z]]). expande([X,s,Y,Z], [[s,X,Y,Z],[X,Z,Y,s]]). expande([X,Y,s,Z], [[s,Y,X,Z],[X,Y,Z,s]]). expande([X,Y,Z,s], [[X,s,Z,Y],[X,Y,s,Z]]). Tarea opcional: Implementa un programa en Prolog que haga búsqueda por profundidad y a lo ancho, y aplicalo a resolver el problema del "bloque deslizante": | B | B | B | | W | W | W | Cada bloque se puede mover al espacio, ya sea directamente o saltando uno o dos bloques. El objetivo es mover las B a la derecha y las W a la izquierda.


Descargar ppt "L. Enrique Sucar/Eduardo Morales"

Presentaciones similares


Anuncios Google