programación lógica

38
Programación Lógica M.C. Juan Carlos Olivares Rojas

Upload: sunila

Post on 13-Jan-2016

56 views

Category:

Documents


4 download

DESCRIPTION

Programación Lógica. M.C. Juan Carlos Olivares Rojas. Agenda. 5.1 Principios de la programación lógica. 5.2 Bases para la programación en lenguaje prolog. Paradigma de Programación Lógica. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programación Lógica

Programación Lógica

M.C. Juan Carlos Olivares Rojas

Page 2: Programación Lógica

Agenda

5.1 Principios de la programación lógica. 5.2 Bases para la programación en lenguaje prolog

Page 3: Programación Lógica

Paradigma de Programación Lógica• Otra forma de estructurar programas es a través

del pensamiento lógico, generalmente lógica de primer orden en donde se pueden expresar mucha información.

• Por cuestiones de tiempo un repaso sobre lógica de primer orden es muy difícil por lo que se realizará sobre la marcha.

Page 4: Programación Lógica

PROLOG• Hechos:• las aves vuelan • los pingüinos no vuelan • "pichurri" es un ave • "sandokan" es un perro • "alegría" es un ave

Page 5: Programación Lógica

PROLOG• Reglas o Restricciones:

• una mascota vuela si es un ave y no es un pingüino

• Preguntas• ¿ "pichurri" vuela ? • ¿ qué mascotas vuelan ?

Page 6: Programación Lógica

PROLOG• Términos: constantes (a), variables (X), funciones

(f(X, Y ))

pepe, juan, Cliente, cliente-de(X, Y )

• Fórmulas atómicas: predicados definidos sobre términos

tipo-cliente(X,bueno)

Page 7: Programación Lógica

PROLOG• Fórmulas bien formadas (wff): fórmulas atómicas

unidas por conectivas (^, _,!, ¬) y cuantificadas (1A universal, 1B existencial)

• 1AX, 1BZ cliente(X) ^ compra(X, Z) ^ caro(Z) tipo-cliente(X, bueno)

• abuelo(X,Y) :- padre(X,Z), padre(Z,Y).• 1AX, Y 1BZ padre(X, Z) ^ padre(Z, Y) abuelo(X, Y )

Page 8: Programación Lógica

PROLOG• abuelo(X,Y) :- padre(X,Z), madre(Z,Y).• abuelo(X,Y) :- padre(X,Z), padre(Z,Y).

• abuelo(X, Y) = {(pepe, juan), (pepe, ana), … , (luis, javier)}

• progenitor(X, Y ) :- padre(X, Y ).• progenitor(X, Y ) :- madre(X, Y ).

Page 9: Programación Lógica

PROLOG• abuelo(X,Y) :- padre(X,Z), madre(Z,Y).• abuelo(X,Y) :- padre(X,Z), padre(Z,Y).

• abuelo(X,Y) :- padre(X,Z), progenitor(Z,Y).

• hechos: A. (A átomo)• reglas: A :- A1, ..., An. (n>0, y A, A1, ..., An

átomos)

Page 10: Programación Lógica

PROLOG• Hechos:– padece(jon, gripe). – padece(jon, hepatitis). – padece(ana, gripe). – padece(carlos, alergia).– es-síntoma(fiebre, gripe).– es-síntoma(cansancio, gripe).– es-síntoma(estornudos, alergia).– suprime(paracetamol, fiebre).– suprime(antihistamínico, estornudos).

Page 11: Programación Lógica

PROLOG• Reglas:– debe-tomar(Per, Far) :- padece(Per, Enf), alivia(Far,

Enf).– alivia(Far, Enf) :- es-síntoma(Sin, Enf), suprime(Far,

Sin).

• Preguntas:– ? padece(carlos, gripe).– ? padece(jon, Z).– ? alivia(paracetamol, gripe).

Page 12: Programación Lógica

PROLOG– ? alivia(X, gripe).– ? debe-tomar(Y, antihistamínico).– ? alivia(X, Y).– ? suprime(X, fiebre), suprime(X, estornudos).

• ¿Qué devuelve cada pregunta como resultado?

Page 13: Programación Lógica

PROLOG• hija (*A, *B) <- mujer (*A), padre (*B, *A). • hija (*A, *B) <- mujer (*A), madre (*B, *A).

• A continuación se muestra un programa completo en PROLOG:

%% declaracionespadrede('juan', 'maria'). padrede('pablo', 'juan').

Page 14: Programación Lógica

PROLOGpadrede('pablo', 'marcela'). padrede('carlos', 'debora'). %%Reglas% A es hijo de B si B es padre de A hijode(A,B) :-

padrede(B,A). abuelode(A,B) :- padrede(A,C), padrede(C,B). hermanode(A,B) :- padrede(C,A) , padrede(C,B), A \

== B. familiarde(A,B) :- padrede(A,B).

Page 15: Programación Lógica

PROLOG

familiarde(A,B) :- hijode(A,B). familiarde(A,B) :- hermanode(A,B). %% consultas % juan es hermano de marcela? ?- hermanode('juan', 'marcela'). Yes?- hermanode('carlos', 'juan'). No?- abuelode('pablo', 'maria'). Yes?- abuelode('maria', 'pablo'). no

Page 16: Programación Lógica

PROLOG

%unificación con evaluación. ?- X is 3+5.X = 8

%unificación simbólica ?- X = 3+5. X = 3+5

Page 17: Programación Lógica

PROLOG

%comparación con evaluación ?- 3+5 =:= 2+6. yes

%comparación simbólica. ?- 3+5 == 2+6. no ?- 3+5 == 3+5. yes

Page 18: Programación Lógica

PROLOG• Los programas en PROLOG se definen a través de

Algoritmos, Lógica y Control.

• En caso de que una consulta de más de un resultado, el prompt no aparece en la shell. Se puede utilizar el operador . Para terminar el resultado, o bien, el operador ; para continuar con los emparejamientos de resultados.

• Se pueden combinar preguntas para obtener respuestas más exactas.

Page 19: Programación Lógica

PROLOG• %Combinación de preguntas• legusta(pepe, pesca).• legusta(maria, bailar).• legusta(ana, pesca).• legusta(pepe, musica).• legusta(maria, musica).• legusta(ana, bailar).

• %preguntas

Page 20: Programación Lógica

PROLOG• ¿Le gusta la música a Pepé y a María?• ?_ legusta(pepe,musica), legusta(maria, musica).

• ¿Le gusta bailar a Pepé o le gusta la música a maria?• ?_ legusta(pepe,bailar); legusta(maria, musica).

• ¿Le gusta bailar a Pepé y a maria no le gusta la música?

• legusta(pepe,bailar), not(legusta(maria,musica)).

Page 21: Programación Lógica

PROLOG• El portal de redes sociales de la UVAQ desea

diseñar un Sistema Experto para encontrar la pareja ideal de cada estudiante si es que existiere. Para lograr esto, se tienen en la base de conocimientos registrados los gustos de cada usuario (color de ojos, altura, complexión, carro, etc.). Se da un punto por cada coincidencia. Diseñar la regla o reglas que determinen la mejor pareja de cada usuario. (Se deben tener al menos 2 hombres y 2 mujeres con 5 gustos c/u).

Page 22: Programación Lógica

PROLOG• Se puede aplicar recursividad en PROLOG además

de que algunos programas en programación estructurada pueden ser implementados.

• %Sucesiones• sucesor(1,2).• sucesor(2,3).• sucesor(3,4).• sucesor(4,5).• sucesor(5,6).

Page 23: Programación Lógica

PROLOG• sucesor(6,7).• suma(1,X,R):-sucesor(X,R).• suma(N,X,R):-sucesor(M,N), suma(M,X, R1),

sucesor(R1, R).

• %Como se crearía una consulta?• %¿Qué es lo que el programa haría?

Page 24: Programación Lógica

PROLOG• %Programa aridad• ama(juan).• ama(pepe, maria).

• La unificación es el proceso en el cual uma variable toma un valor.

• Cuando una variable tiene un valor, este no cambia.

Page 25: Programación Lógica

Prolog• Realizar un programa en Prolog que permita

determinar si dos personas pueden comunicarse entre sí.

• Se deberá codificar una base de conocimientos para 5 personas con los idiomas que conocer, así como establecer una regla que permita inferir el resultado.

Page 26: Programación Lógica

PROLOG• Dos términos se ejecutan cuando existe una posible

ligadura en sus variables y en sus valores. Ejemplo: a(X, 3) = a(2, Y).

• edad(luis,25).• edad(hugo,32).• edad(paco,29).• edad(jaime,67).• edad(laura,85).• es_viejo(Persona) :- edad(Persona,Valor), valor > 60.

Page 27: Programación Lógica

Ejercicio• padre(X,Y) – X es padre de Y• madre(X,Y) – X es madre de Y• es_padre(X) – X es un padre• es_madre(X) – X es una madre• es_hijo(X) – X es un hijo (hombre)• hermana(X,Y) – X es hermana de Y• abuelo(X,Y) – X es abuelo (hombre) de Y• tia(X,Y) – X es tía de Y• primo(X,Y) – X es primo (hombre) de Y

Page 28: Programación Lógica

PROLOG• Prolog tiene la característica de ser reversible; es

decir, los argumentos pueden ser de entrada y salida. Si se tiene un predicado abuelo se puede saber quienes son los nietos de ese abuelo.

• Esto no sucede con los operadores aritméticos.

• Otro tipo de datos utilizado en Prolog es el registro. El cual es una combinación de elementos.

Page 29: Programación Lógica

PROLOG• Por ejemplo: persona(‘Eva’, ‘López’, ‘Cárdenas’,

25)

• Define a una persona teniendo como atributos su nombre, sus apellidos y su edad. Dado que los términos son anidados se pueden tener registros como:

• Persona(“Helena”, edad(22), dirección(‘Miguel Hidalgo 33’, ‘Centro’, ‘Morelia’))

Page 30: Programación Lógica

PROLOG• Se pueden utilizar estructuras de datos

recurrentes como árboles, en donde el primer elemento podría ser un nodo, el segundo el hijo izquierdo y el tercer elemento, el hijo derecho.

• arbol(dato1, temp, temp)• arbol(dato1, arbol(dato2, temp, temp), temp)

• En donde temp indica un campo vacío.

Page 31: Programación Lógica

PROLOG• % Ejemplo • entrada(paella). • entrada(gazpacho). • entrada(consome). • carne(filete_de_cerdo). • carne(pollo_asado). • pescado(trucha). • pescado(bacalao). • postre(flan).

Page 32: Programación Lógica

PROLOG• postre(nueces_con_miel). • postre(naranja). • calorias(paella, 200). • calorias(gazpacho, 150). • calorias(consome, 300). • calorias(filete_de_cerdo, 400). • calorias(pollo_asado, 280). • calorias(trucha, 160). • calorias(bacalao, 300).

Page 33: Programación Lógica

PROLOG• calorias(flan, 200). • calorias(nueces_con_miel, 500). • calorias(naranja, 50). • plato_principal(P):- carne(P); pescado(P). • comida(Entrada, Principal, Postre):-

entrada(Entrada), plato_principal(Principal), postre(Postre).

• valor(Entrada, Principal, Postre, Valor):- calorias(Entrada, X), calorias(Principal, Y), calorias(Postre, Z), sumar(X, Y, Z, Valor).

Page 34: Programación Lógica

PROLOG• comida_equilibrada(Entrada, Principal, Postre):-

comida(Entrada, Principal, Postre), valor(Entrada, Principal, Postre, Valor), menor(Valor, 800).

• sumar(X, Y, Z, Res):- Res is X + Y + Z. • menor(X, Y):- X < Y. • dif(X, Y):- X \==Y. • • Encontrar: ¿Cuántas calorías tiene la combinación

paella, trucha, naranja? ¿Qué comida que tiene cónsome de entrada es la más balanceada?

Page 35: Programación Lógica

PROLOG• Se pueden definir funciones recursivas como el

factorial:

• fac(0,1).• fac(N,F) :- N > 0, M is N - 1, fac(M,Fm), F is N *

Fm.

• ¿Cómo se expresa la serie de fibonnaci?

Page 36: Programación Lógica

Prolog• El predicado trace() permite observar la

invocación de un predicado

• El predicado listing() permite visualizar la regla que define un predicado en particular.

• El predicado assert() permite agregar un predicado a la base de conocimiento.

Page 37: Programación Lógica

Proyecto• Se realizará el programa adivina quien.

• Se codificarán como hechos al menos 5 personas con 5 características físicas. Se tendrá una regla que indique quién es la persona al inicio.

• Se codificarán reglas para preguntar, si tienen la característica física y una regla para afirmar quien es (si no le atina pierde el jugador).

Page 38: Programación Lógica

¿Preguntas, dudas y comentarios?