TUTORIALPROLOG2022II
TUTORIALPROLOG2022II
/Tutorial Prolog
Julián Andrés Pereira
Jefferson Daniel Castro
Nicolás Andrés Caicedo
Gabriel Enrique Ramirez
TUTORIAL_PROLOG.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/CONTENIDO
INDEX.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/01
/INTRODUCCIÓN
¿Qué es?, tipo, propósito,
aplicaciones, ventajas,
desventajas e historia
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
¿Qué es PROLOG?
● Existen variaciones de este
● Es un lenguaje de
lenguaje con la capacidad de
programación lógico.
resolver sistemas de
● Busca expresar de forma
ecuaciones
lógica problemas complejos
● Su nombre viene del francés
donde la programación
Programmation en Logique
imperativa ha fracasado
(Programación Lógica).
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
¿Paradigma de Programación?
● Fundamentado en la lógica
● Paradigma de programación
de primer órden o de
lógico (declarativo)
predicados
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
¿Paradigma de Programación?
● Se definen Reglas para el
● Se parte de un conjunto de
cálculo de predicados
Hechos como conocimiento
base(predicados ->
● Se realizan Consultas como
Verdadero)
forma de generar más
conocimiento.
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
● Hechos
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
● Reglas
● Consultas
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
¿Paradigma de Programación?
● Backtracking: Mecanismo con
● Para poder hacer la
el que Prolog trata de
inferencia lógica, Prolog se
buscar una solución en el
basa en tres mecanismos:
árbol SLD.
Unificación, Backtracking y
Resolución SLD.
● Resolución SLD: Mecanismo
con el cual se construyen
● Unificación: Trata de hacer
todas las posibles
match entre los functores o
soluciones con base en los
átomos.
hechos y las reglas.
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
¿Proposito?
● Existen variaciones de este
● Busca expresar de forma lenguaje con la capacidad
lógica problemas complejos de resolver sistemas de
donde la programación ecuaciones
imperativa ha fracasado
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
Aplicaciones
● Intelligent Database ● Machine Learning
Retrieval
● Robot Planning
● Natural Language
Understanding ● Automation System
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
Ventajas y Desventajas
● Sintaxis fácil de Aprender ● Curva larga de aprendizaje
● Poco tiempo escribiendo de lógica matemática
código ● Una forma diferente de
● Fácil lectura y pensar a la usual
modificación
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
Ventajas y Desventajas
● Manejo fácilmente de ● Puede ser ineficiente si no
estructuras de datas se estructura bien el
complejas problema
● Modelado de problemas más
fácil y rápido.
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
Un poco de Historia…
● Creado por Alain ● La primera implementación
Colmerauer with Philippe fue un intérprete hecho en
Roussel alrededor de 1972. Fortran by Gerard Battani
● Fue diseñado para el and Henri Meloni.
procesamiento de lenguaje ● David H. D. Warren
natural y el razonamiento construyó el primer
lógico. compilador.
INTRODUCTION.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/02
/CONCEPTOS
BÁSICOS
Hechos, consultas, reglas,
expresiones, backtracking,
predicados, listas, árboles.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
PROLOG
La popularidad del lenguaje se
Diseñado para representar y
debe a su capacidad de deducción
utilizar el conocimiento que se
y además es un lenguaje fácil de
tiene sobre un determinado
usar por su semántica y sintaxis.
dominio. Los programas en Prolog
Solo busca relaciones entre los
responden preguntas sobre el
objetos creados, las variables y
tema del cual se tiene
las listas, que son su estructura
conocimiento.
básica.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
TÉRMINOS
Único elemento del lenguaje, ● Constantes
está compuesto de un functor ○ Números
seguido de cero a n argumentos ○ Átomos o functores
entre paréntesis y separados por ● Variables
comas ● Estructuras
Ejemplo: functor(2)
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/TÉRMINOS
/CONSTANTES /VARIABLES /ESTRUCTURAS
Números: Representan
valores reales y Son términos compuestos
Se representan mediante
enteros para realizar por otros términos. Se
cadenas formadas por
operaciones aritméticas construyen mediante un
letras, dígitos y el
Functores: Utilizados símbolo de función,
símbolo de
para nombrar objetos, denominado functor,
subrayado,también con
propiedades o seguido entre
una letra mayúscula en
relaciones. Deben paréntesis, por una
su inicio.
conjunto de términos
empezar en minúscula
separados por comas.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
HECHOS
Cláusula sin cuerpo que muestra una relación explícita entre objetos y
declaran los valores que son verdaderos para un predicado. Su estructura se
compone de un predicado y un argumento u objeto.
● El predicado debe iniciar con minúscula.
● Los argumentos se escriben separados por comas, en minúscula y
encerrados entre paréntesis.
● Todos los hechos deben terminar en punto.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
CONSULTAS
Un conjunto de hechos genera una base de datos a la cual se puede
realizar una serie de preguntas para extraer el conocimiento generado
por esta. Comienzan con un signo de interrogación seguido de un guión
?- y terminan en punto. Ante una consulta, Prolog intenta hacer un
matching sobre la base de conocimiento.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
CONSULTAS
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
REGLAS
Cuando la verdad de un hecho depende de la verdad de otro hecho o de
un grupo de hechos se usa una regla. Declaran las condiciones para que
un predicado sea cierto, con una implicación que pueden relacionar
hechos para dar los valores de verdad a un predicado. Una regla está
compuesta por una cabeza y un cuerpo. El cuerpo puede estar formado
por varios hechos y objetivos. Su sintaxis general es:
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/REGLAS
/CONJUNCIONES /DISYUNCIONES
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
REGLAS RECURSIVAS
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
BACKTRACKING
Prolog siempre está consultando
su base de datos, para
verificar que hechos son
verdaderos y que nos permitirá
la construcción de las posibles
reglas. Para problemas de
recursión, prolog se devuelve
hasta que encuentra que un
hecho base es verdadero y de
ahí construye la respuesta.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/EXPRESIONES
PREDICADOS
Conjunto de predicados que
permiten determinar el tipo
de términos que estamos
usando
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
PREDICADOS
Conjunto de predicados que
permiten controlar otros
predicados
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
PREDICADOS
Conjunto de predicados de
lectura y escritura
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
LISTAS
Es una secuencia ordenada de
elementos que puede ser de
cualquier longitud.
En prolog están formadas por
cabeza y cola, se representan
como una serie de elementos
separados por como y entre
corchetes rectangulares.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/unificación
unificar una lista
con otra.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/LISTAS
/recursion Criterios de terminación en Prolog.
/* Regla de terminación */
Cuando la lista predicado([ ]):- procesar([ ]).
está vacía. /* Regla recursiva */
predicado([Cabeza | Cola]):- procesar(Cabeza), predicado(Cola).
/* Regla de terminación */
Cuando un elemento predicado(Cabeza, [Cabeza | Cola]):- procesar algo.
es encontrado. /* Regla recursiva */
predicado(X, [Cabeza | Cola]):- procesar algo, predicado(X, Cola).
/* Regla de terminación */
Cuando una posición predicado(1,Cabeza, [Cabeza | Cola]):- procesar algo.
es encontrada. /* Regla recursiva */
predicado(P, X, [ | L]):- P1=P-1, predicado(P1,X, L).
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
ÁRBOLES
un nodo padre y dos hijos.
También definido como el elemento raíz cuyos
hijos son árboles.
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/ÁRBOLES
/representación
6
9
4
2 5 7
tree1(t(6, t(4, t(2, nil, nil), t(5, nil, nil)), t(9, t(7, nil, nil), nil))).
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/reglas
posibles recorridos de un árbol.
Inorder:
Preorder:
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/ÁRBOLES
/otra representación [left, data, right]
9
4
2 5 7
[[[[],2,[]],4,[[],5,[]]],6,[[[[],7,[]],9,[]]]
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/N-arios
elementos de la cola serán el conjunto de nodos
hijos.
2 4 5 7 9
BASIC_CONCEPTS.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/03
/INSTALACIÓN
SWI-PROLOG, PASOS, VERSION EN
LINEA
INSTALL.HTML
SWI-PROLOG EN LOCAL
https://www.swi-prolog.org/download/stable
INSTALL.HTML
INSTALL.HTML
INSTALL.HTML
PROLOG EN LINEA
https://swish.swi-prolog.org
INSTALL.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/04
/EJEMPLOS
https://swish.swi-prolog.org
/p/PL20222-Practica.pl
EXAMPLES.HTML
Ejemplo 1:
Cadena alimenticia
EXAMPLES.HTML
Ejemplo 2: A Elena no le gustan las
serpientes
EXAMPLES.HTML
Ejemplo 3: Maximo comun divisor
EXAMPLES.HTML
Ejemplo 4: Sucesión de fibonacci
EXAMPLES.HTML
Ejemplo 5:
Sistema que define qué
animal es el que cumple las
características dadas por
un usuario.
EXAMPLES.HTML
EXAMPLES.HTML
EXAMPLES.HTML
EXAMPLES.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/REFERENCIAS
● https://www.swi-prolog.org/
● https://www.dsi.fceia.unr.edu.ar/downloads/IIA/recursos/Tutorial%
20de%20%20Prolog.pdf
● https://ferestrepoca.github.io/paradigmas-de-programacion/proglog
ica/tutoriales/prolog-gh-pages/index.html#22-programa
● http://fcqi.tij.uabc.mx/usuarios/ardiaz/conceptos.html
● https://swish.swi-prolog.org/p/PL2019-I.swinb
● https://elvex.ugr.es/decsai/intelligent/workbook/ai/PROLOG.pdf
REFERENCES.HTML
Universidad Nacional de Colombia - Lenguajes de Programación 2022-2
/¡Gracias!
/¿Preguntas?
10Q.HTML