Este documento presenta una introducción al lenguaje de programación lógica Prolog. Explica que Prolog es un lenguaje declarativo donde se declaran hechos y reglas en lugar de procedimientos. También describe los cuatro componentes principales de un programa Prolog: dominios, predicados, cláusulas y objetivos. Finalmente, detalla algunos conceptos como hechos, reglas, variables y la estructura general de un programa Prolog.
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Programación lógica
1. Programación Lógica
1 Introducción al lenguaje PROLOG
1.0 Lenguaje Procedural vs Lenguaje Declarativo
• El Lenguaje procedural permite al programador decirle a la computadora lo que
tiene que hacer, paso a paso, procedimiento por procedimiento, hasta alcanzar
una conclusión o ejecutar una función.
Ejemplo: Ingreso de Clientes
• Prolog es declarativo, se declara la situación con la que quiere trabajar y a donde
quiere ir. El propio lenguaje realiza el trabajo de decidir como alcanzar dicho
objetivo.
Ejemplo: Quien es el abuelo de Carlos?
1.1 Generalidades
Prolog es un lenguaje de programación que se utiliza para resolver problemas que existen
entre objetos y relaciones. La programación en Prolog consiste simplemente en:
• declarar hechos sobre los objetos y sus relaciones,
• definir reglas sobre dichos objetos y relaciones, y
• hacer preguntas.
Prolog es un lenguaje de programación declarativa (coloquial), lo cual quiere decir que el
computador y el programador sostienen una especie de conversación. Prolog espera a que
se ingrese hechos y las reglas que definen el problema a resolver.
Una recomendación, Prolog es diferente a cualquier otro lenguaje de bajo o alto nivel, por
tanto, nunca resolver un problema en otro lenguaje para luego traducirlo a Prolog.
Objetos y Relaciones
Un objeto puede ser cualquier cosa que pueda representarse simbólicamente en una
computadora:
león
tigre
puma
papa
1
Ing. Saúl Pérez Vega PRACTICA 01
2. Programación Lógica
camote
lechuga
oro
plata
Y las relaciones son:
animal
vegetal
mineral
1.2 Los Hechos
Un hecho es una relación entre objetos.
Sintaxis:
relacion (objeto, objeto, ...)
La relación se conoce como el predicado y los objetos como los argumentos.
Los siguientes puntos son importantes:
• Los nombres de las relaciones deben comenzar con una letra minúscula.
• Los objetos se escriben separados por comas y encerrados entre paréntesis.
• Al final del hecho debe de ir un punto.
Por ejemplo:
animal(leon).
vegetal(papa).
mineral(oro).
1.3 Las Reglas
Cuando la verdad de un hecho depende de la verdad de otro hecho o de un grupo de
hechos se usa una regla. Una regla consiste en una cabeza y un cuerpo. El cuerpo puede
estar formado por varios hechos u objetivos.
2
Ing. Saúl Pérez Vega PRACTICA 01
3. Programación Lógica
Sintaxis:
cabeza :‐ objetivo 1, objetivo 2, ..., objetivo n.
Los objetivos van separados por comas, especificando conjunción y al final debe de ir un
punto. Por ejemplo, una regla es
Mayor_de_edad(X) :‐ persona(X,E), E>18.
1.4 Las variables
Las variables se utilizan para describir hechos y reglas generales. Los nombres de las
variables deben comenzar con letra mayúscula o con el carácter (Edad, E).
1.5 La estructura de un programa en PROLOG
La mayoría de los programas en Prolog están organizados en cuatro secciones principales:
• domains
• predicates
• clauses
• goal
Sección de constantes
En la sección de constantes podemos declarar constantes simbólicas que pueden usarse
en el cuerpo del programa. La utilidad de las constantes en Visual Prolog es similar a la
que estos elementos tienen en otros lenguajes de programación, normalmente, sirven
para facilitar el uso de diversas cantidades, expresiones y símbolos.
La definición de la sección de constantes se encabeza con la palabra reservada
CONSTANTS, y cada línea de definición es de la forma <Nombre Constante> = <Definición
de Macro>.
Por ejemplo, el siguiente fragmento de programa:
3
Ing. Saúl Pérez Vega PRACTICA 01
4. Programación Lógica
CONSTANTS
numero = 1
expresion = 1+1
GOAL
A=numero, B=expresion, write(A), write(B), nl.
Resultado
12
A=1, B=2
1 Solution
Las restricciones que se imponen en el uso de constantes se exponen a continuación:
• El sistema no distingue entre mayúsculas y minúsculas.
• La definición de una constante no puede referirse a sí misma, es decir, no es
posible construir definiciones recursivas de constantes.
• Puede haber varias secciones CONSTANTS a lo largo del programa, y toda
constante debe ser definida antes de ser utilizada.
• Las constantes declaradas son efectivas desde el punto en que son declaradas
hasta el final del fichero fuente donde han sido definidas y en algunos ficheros
incluidos tras la declaración.
• Las constantes sólo se pueden declarar una vez.
Sección de dominios
En la sección DOMAINS se pueden definir dominios no especificados por defecto por
Visual Prolog. Por ejemplo, el dominio integer es estándar para el compilador, no así el
dominio sinónimo ENTERO o dominios complejos. En estos últimos casos, el programador
debe definirlo en esta sección.
Dominios Stántard
• char, carácter encerrado entre apostrofes (comillas simples)
('a', 'b', 'c')
• Integer, Enteros desde ‐2147483648 hasta 2147483647
• Real, Número con punto flotante equivalente al doublé. El rango permitido es
1*10^‐307 hasta 1*10^+308
4
Ing. Saúl Pérez Vega PRACTICA 01
5. Programación Lógica
• String, Referidos a una secuencia de caracteres escritos entre comillas. Ejemplo:
“Pedro Arce”.
• Symbol similar al String
Cada sección de dominios debe comenzar con la palabra DOMAINS. Ejemplo:
DOMAINS
ENTERO = INTEGER
Es posible usar 5 formatos de declaraciones para dominios definidos por el usuario.
Dominios de Objetos Compuestos
El formato es como sigue:
dominio = [reference] [align {byte|word|dword}] declaracion1;[declaracion2];...
• dominio: nombre dado al dominio especificado por el usuario.
• declaracion1; [declaracion2]: declaración de objetos compuestos alternativos que
tienen que tener la forma siguiente: functor([sub_1 [, sub_2, ...] ]) donde
o functor es el nombre del objeto compuesto alternativo.
o sub_1 [,sub_2, ...] son subcomponentes del objeto compuesto que deben
tener su correspondiente nombre y dominio. Este último puede ser
estándar o definido por el usuario.
• reference: indica la declaración de un dominio de referencia. En este tipo de
dominios los argumentos de entrada pueden ser variables libres.
• align: indica el tipo de distribución de memoria que se va a usar.
En predicates se declaran todos los predicados no predefinidos que se utilizarán en la
sección clauses. Los hechos y las reglas se escriben en la sección clauses.
Como nuestro Prolog puede usarse de forma interactiva, es frecuente ejecutar un
programa y luego esperar a que se nos pregunte el objetivo. La sección goal nos permite
ejecutar los programas de una forma no interactiva, y por tanto, buscará la solución
deseada tan pronto como se ejecute el programa.
goal
write(quot;Holaquot;),nl,
write(quot;Lenguaje: Prologquot;),
nl.
5
Ing. Saúl Pérez Vega PRACTICA 01
6. Programación Lógica
1.6 Ejercicios
1.6.1 Ejercicio01
Test Goal
Mode
Es el resultado de ejecutar el
programa.
Añadir 5 alumnos y ejecutar
1.6.2 Ejercicio02
predicates
le_gusta(symbol,symbol) ‐ nondeterm(o,o)
clauses
le_gusta(alexander,natacion).
le_gusta(tatiana,tenis).
le_gusta(franz,tenis).
le_gusta(jahayra,natacion).
le_gusta(maria_del_pilar,esgrima).
le_gusta(rudy_fritz,ajedrez).
6
Ing. Saúl Pérez Vega PRACTICA 01
7. Programación Lógica
le_gusta(katty,natacion).
le_gusta(katiuska,natacion).
le_gusta(harry,ajedrez).
Le_gusta(cristobal,Deporte) if
goal
write(quot;Listado del programaquot;),nl,
% le gusta a Tatiana el tenis?
le_gusta(tatiana,tenis).
% a que persona le gusta un deporte
% le_gusta(Persona,Deporte).
%que deporte le gusta a tatiana
%write(quot;A Tatiana le gusta elquot;),nl,le_gusta(tatiana,Deporte).
%que deportes les gusta a tatiana y harry
%write(quot;tatiana y harry practicanquot;),nl,
%le_gusta(tatiana,Deporte) or le_gusta(harry,Deporte).
%a quienes les gusta el tenis o el ajedrez
%le_gusta(Persona,tenis) or le_gusta(Persona,ajedrez).
1.6.3 Ejercicio03
predicates
numero_telefonico(symbol,symbol) ‐ nondeterm (i,o)
clauses
numero_telefonico(quot;Albertoquot;,quot;9555‐3665quot;).
numero_telefonico(quot;Bettyquot;,quot;9755‐5233quot;).
numero_telefonico(quot;Karolaquot;,quot;9941‐1010quot;).
numero_telefonico(quot;Damianquot;,quot;9954‐8400quot;).
goal
numero_telefonico(quot;Karolaquot;,Number).
7
Ing. Saúl Pérez Vega PRACTICA 01
8. Programación Lógica
1.6.4 Ejercicio04
predicates
es_una_letra(char) ‐ nondeterm (i)
clauses
es_una_letra(Ch):‐
'a' <= Ch,
Ch <= 'z'.
es_una_letra(Ch):‐
'A' <= Ch,
Ch <= 'Z'.
goal
es_una_letra('a').
1.7 Ejercicios propuestos
1.7.1. Cuando ejecutes el programa, verás aparecer la ventana de diálogo; observa el
mensaje goal y pregunta los siguientes objetivos:
(i) >El murciélago es animal?
(ii) >El murciélago es vegetal?
(iii) >El murciélago es vegetal y animal?
(iv) >El murciélago es vegetal o animal?
(v) Escribe todos los animales.
1.7.2 Una agencia matrimonial
Una agencia matrimonial tiene una lista de candidatos al matrimonio organizado según las
declaraciones siguientes:
hombre(N,A,C,E)
mujer(N,A,C,E)
8
Ing. Saúl Pérez Vega PRACTICA 01
9. Programación Lógica
donde: N es el nombre de un hombre o una mujer, A su altura (alta, media, baja), C el
color de su cabello (rubio, castaño, pelirrojo, negro) y E su edad (joven, adulta, madura).
gusta(N,M,L,S)
indica que a la persona N le gusta el género de música M (clásica, pop, jazz), el género de
literatura L (aventura, ciencia ficción, policíaca ), y practica el deporte D (tenis, natación,
jogging).
busca(N,A,C,E)
expresa que la persona N busca una pareja de altura A, con cabello de color C y edad E.
Se considera que dos personas X e Y de sexos diferentes son adecuadas si X conviene a Y
e Y conviene a X. Se dice que X conviene a Y, si X conviene físicamente a Y (la altura,
edad, y cabello de X son las que busca Y), y si además, los gustos de X e Y en música,
literatura y deporte coinciden.
(i) Escribe un conjunto de declaraciones que representen el listado de candidatos.
(ii) Escribe las reglas:
• conviene_fisicamente(X,Y)
• tiene_igual_gusto(X,Y)
(iii) Listar las parejas que son adecuadas por afinidad.
1.7.3 Una agencia de viajes
Una agencia de viajes propone a sus clientes viajes de una semana a Roma, Londres o
Alemania. El catalogo de la agencia contiene, para cada destino, el precio del transporte y
el precio de una semana de estancia que varía según el destino y el nivel de comodidad
elegidos: hotel, hostal o camping.
(i) Escribe el conjunto de declaraciones que describen este catalogo (los precios se dejan a
tu elección).
(ii) Expresa la relación viaje(c,s,h,p) que se interpreta como: el viaje a
la ciudad c durante s semanas con estancia en h cuesta d dolares.
(iii) Completa con viaje economico(c,s,h,p,p max) que expresa que el costo p es menor que
p max dolares.
9
Ing. Saúl Pérez Vega PRACTICA 01