Post on 09-Apr-2016
description
PROLOG
PROGRAMACION LOGICA
ING. LUIS FELIPE CARVAJAL JARAMILLO
QUE ES?
El Prolog (o PROLOG), proveniente
del francés PROgrammation en LOGique,1 es
un lenguaje para programar artefactos electrónicos
mediante el paradigma lógico con técnicas de producción
final interpretada. Es bastante conocido en el área de
la Ingeniería Informática para investigación en Inteligencia
Artificial.
http://es.wikipedia.org/wiki/Prolog
PROGRAMANDO EN PROLOG
Descargar “SWI-Prolog”
http://www.swi-prolog.org/download/stable
Instalar “SWI-Prolog”
Ejecutar “SWI-Prolog”
interprete
PROGRAMANDO EN PROLOG
Archivos de extensión .PL (archivos de texto)
Pasos:
Crear el archivo
Compilar el archivo
Realizar Consultas al archivo
ejemplo de los países
Creación de la base de datos de países (esta es la base de
datos de conocimiento del sistema)
es_un_pais(colombia). %regla que define a Colombia como un país
es_un_pais(chile).
es_un_pais(brasil).
es_un_pais(peru).
es_un_pais(argentina).
Creación de las reglas que orientarán la lógica conceptual
limita_con(colombia , brasil).
limita_con(colombia , peru).
limita_con(brasil , peru).
CONSULTAS
Es_un_pais(Colombia).
True
Es_un_pais(Brasil).
True
Es_un pais(china).
False
Es_un_pais(X).
Colombia;
Chile;
Brasil;
Peru;
argentina
ESTRUCTURA EN GRAFOS (DIRIGIDOS)
Colombia chile
Brasil
argentina
Perú
Nótense las flechas
Lo que restringe el
sentido de la relación
• CONSULTAS CON GRAFOS DIRIGIDOS
• Es_un_pais(X), write(X), nl, fail.
True
• limita_con(X,Y), write(X),write(-),write(Y), nl, fail.
colombia-Brasil
colombia-peru
brasil-peru
false.
ESTRUCTURA EN GRAFOS (NO DIRIGIDOS)
• Definir una regla que asocie en ambos sentidoslimitrofes(X,Y):- limita_con(X,Y); %OR regla conjuntiva
limita_con(Y,X).
• “:-” significa SI (condición)
Colombia chile
Brasil
argentina
Perú
Nótese que no hay flechas,
lo que asegura el doble
sentido de la relación
CONSULTA
limitrofes(X,Y), write(X),write(-),write(Y), nl,fail.
colombia-brasil
colombia-peru
brasil-peru
brasil-colombia
peru-colombia
peru-brasil
false.
REGLAS DISYUNTIVAS (or)
Y CONJUNTIVAS (and)
• creación de las reglas conjuntivas(OR ";")
limitrofes(X,Y):- limita_con(X,Y); %OR regla conjuntiva
• limita_con(Y,X).
Compuestas por una cola y varios predicados (uno solo verdadero hace verdadera toda la expresión)
• creación de las reglas disyuntiva (AND “,”)
pais_pequeño(X):- superificie_pais(X,Y), %AND regla disyuntiva
• Y < 900000.
Compuestas por una cola y varios predicados (todas deben ser verdaderas para que toda la expresión también lo sea)
CONSULTA
limitrofes(X,Y), write(X),write(-),write(Y), nl,fail.
colombia-brasil
colombia-peru
brasil-peru
brasil-colombia
peru-colombia
peru-brasil
false.
CONSULTA
pais_pequeño(X), write(X),nl,fail.
chile
false.
PLANTEAMIENTO DE UN PROBLEMA
DEFINIR LA SIGUIENTE REGLA
Obtener los pares de países translímitrofes,
definiendo que dos países X ,Y son
translímitrofes si X limita con un país Z y Z
limita con Y, pero X y Y no son limítrofes. Un
país no es translímitrofes con si mismo
Ejemplos:
MEXICO Y CANADA SON TRANSLIMITROFES
COLOMBIA Y CHILE SON TRANSLIMITRIFES
RESPUESTA DEL PROBLEMAtranslimitrofes(X,Y):- limitrofes(X,Z),
limitrofes(Z,Y),
dif(X,Y),
not(limitrofes(X,Y)).
CONSULTA
translimitrofes(colombia,chile).
true
translimitrofes(X,Y),write(X),write(-),write(Y),nl,fail.
colombia-chile
brasil-chile
chile-colombia
chile-brasil
false.
LENGUAJE LOGICO VRS LENGUAJE
PROCEDIMENTAL(C,JAVA)
PROLOG:
Definición de una sola regla para crear la base de datos de conocimiento
Muy pocas líneas de código
Muy poco tiempo de desarrollo
Lenguaje muy similar al lenguaje común (español en nuestro caso), lo que deriva en no requerir programadores expertos
LENGUAJE PROCEDIMENTAL
Tiempo de creación del banco de datos
Cuantas líneas de código???
Cuanto tiempo de desarrollo ???
Complejidad del código, requerimiento de complejos niveles de programación
PROLOG Y BASES DE DATOS
OPERADORES RELACIONALES PROLOG y sus semejanzas con las BASES DE DATOS RELACIONALES
OPERADORES DE ALGEBRA RELACIONALES y codificación en SQL
Teoría de conjuntos
Lógica de predicados de primer orden
Implementar un regla de PROLOG para cada OPERADOR DE ALGEBRA RELACIONAL
Existen dos operadores básicos o unarios
PROYECCIÓN la proyección de E según X (πxE)
E es una relación (que no es mas que una tabla)
SELECCIÓN la selección de E según THETA “θ” (δθE)
E es una relación, revisa elemento por elemento y evalúa la condición THETA y si es verdadera la adiciona a la salida y si la condición es falsa la descarta y continua
…PROLOG Y BASES DE DATOS RELACIONALES
ejemplo de proyección (se eligen columnas)
En SQL select nombre from insumos;
N0MBRE PRECIO
Arena 20
Cemento 80
Cal 50
hierro 120
TABLA DE INSUMOS
NOMBRE
Arena
Cemento
Cal
hierro
Π nombre INSUMOS
“La proyección INSUMOS sobre el atributo nombre”
…PROLOG Y BASES DE DATOS RELACIONALES
ejemplo de proyección (se eligen columnas)
En PROLOG SE ELIGEN COLUMNAS
proyectarN, asigna el nombre al campo
(debe empezar con Mayuscula. Proyectar el
nombre si ese nombre figura en la tabla
insumos. “_” es una variable indeterminada
El resultado, proyecta una columna de una
tabla, habría que hacer una regla para cada
tipo de proyección que quiero. (dos formas
de hacer lo mismo)
“_” es una indeterminada
…PROLOG Y BASES DE DATOS RELACIONALES
ejemplo de selección (se eligen filas)
En SQL select * from insumos where precio<80;
Se muestran todos los campos o atributos
TABLA DE INSUMOS δprecio<80 INSUMOS“La selección en INSUMOS donde el precio sea menor que 80
NOMBRE PRECIO
Arena 20
Cal 50
Conserva el esquema de la tabla
N0MBRE PRECIO
Arena 20
Cemento 80
Cal 50
hierro 120
…PROLOG Y BASES DE DATOS RELACIONALES
ejemplo de selección (se eligen filas) En PROLOG SE ELIGEN FILAS
se proyectan las dos columnas de la tabla,
Seleccionar Nombre y Costo, si existen en la
tabla (regla) Insumo y el costo es > a 25 pesos
Solo se muestran aquellos
que cumplen La condición
especificada en la regla
PROLOG Y BASES DE DATOS
OPERADORES BINARIOS
X producto cartesiano (E1XE2)
Da la combinación de cada elemento que pertenece a
E1 con cada elemento en E2, donde E1 y E2 son
conjuntos de elementos
U Unión (E1UE2)
Da todos los elementos que pertenecen a E1 y/o a E2
- Diferencia (E1-E2)
Da todos los elementos que pertenezcan a E1 pero no
pertenezcan a E2
PROLOG Y BASES DE DATOS
OPERADORES BINARIOS (PRODUCTO CARTESIANO)
CampoT1_1 CampoT1_2
A1 B1
A2 B2
A3 B3
CampoT2_1 CampoT2_2
A4 B4
A5 B5
TABLA 1
TABLA 2
CampoT1_1 CampoT1_2 CampoT2_1 CampoT2_2
A1 B1 A4 B4
A1 B1 A5 B5
A2 B2 A4 B4
A2 B2 A5 B5
A3 B3 A4 B4
A3 B3 A5 B5
TABLA 1 X TABLA 2
La cantidad de filas del resultado es: la multiplicación de las filas de TABLA1
Multiplicado por la cantidad de filas de TABLA2
La cantidad de columnas del resultado es: la suma de las columnas de TABLA1
mas la cantidad de columnas de TABLA2
PROLOG Y BASES DE DATOS
OPERADORES BINARIOS (PRODUCTO CARTESIANO)EN SQL select campoT1_1,campoT1_2, campoT2_1,campoT2_2
from tabla1,tabla2;
EN PROLOG
Instanciación
de dos tablas
Producto
cartesiano de
ambas tablas
“,”es AND
PROLOG Y BASES DE DATOS
OPERADORES BINARIOS (UNION)
CampoT1_1 CampoT1_2
A1 B1
A2 B2
A3 B3
CampoT2_1 CampoT2_2
A4 B4
A5 B5
TABLA 1
TABLA 2
CampoTR_1 CampoTR_2
A1 B1
A2 B2
A3 B3
A4 B4
A5 B5
TABLA 1 U TABLA 2
Si existen un elemento repetido en la
U este no se repite, no se puede unir
cualquier cosa con cualquier cosa,
deben ser compatibles (cuando tienen
el mismo numero de columnas y están
definidas sobre el mismo dominio o
tipo de datos
PROLOG Y BASES DE DATOS
OPERADORES BINARIOS (UNION)EN SQL select * from tabla1 UNION select * from tabla2;
EN PROLOG
En la Unión no se dan elementos
repetidos,
El ; es la Unión.
PROLOG Y BASES DE DATOS
OPERADORES BINARIOS (DIFERENCIA/INTERSECCION)
CampoT1_1 CampoT1_2
A1 B1
A2 B2
A3 B3
CampoT2_1 CampoT2_2
A4 B4
A3 B3
TABLA 1
TABLA 2
CampoTR_1 CampoTR_2
A1 B1
A2 B2
TABLA 1 - TABLA 2
deben ser compatibles (cuando tienen
el mismo numero de columnas y están
definidas sobre el mismo dominio o
tipo de datos
PROLOG Y BASES DE DATOS
OPERADORES BINARIOS (DIFERENCIA/INTERSECCION) En SQL select * from Tabla1 minus select * from Tabla2;
Algunas versiones utilizan except o intersect
En PROLOG
Creación de otra tabla con un dato
Repetido, para evidenciar la diferencia
Son los insumos que no pertenecen a la
Tabla insumoimportados.
“, not” es la diferencia