Está en la página 1de 7

Hizo falta profundizar en lo que tiene que ver con las

relaciones entre los modelos y paradigmas vistos en el


curso y cómo aparecen en el lenguaje.
PROLOG
Andrés M. Valencia R.
Escuela de ingeniería de sistemas y ciencias de la computación
Maestría en ingeniería con énfasis en ciencias de la computación
Universidad del valle

Resumen, En la actualidad son miles los lenguajes de programación que se han


creado bajo la aplicación de múltiples formas de funcionamiento y áreas de
implementación, por lo que resulta imposible llegar a conocer a profundidad cada
uno de estos, lo que ha generado que algunos lenguajes de programación con gran
potencial queden en el olvido por la incapacidad de dar a conocer su funcionalidad,
por esta razón en este documento se presenta un estudio que busca resolver las
principales dudas que presentan los programadores sobre uno de estos lenguajes que
goza de poca popularidad actualmente, a pesar de presentar un potencial enorme en
el desarrollo de diversas aplicaciones y sistemas inteligentes.
Abstrac, Currently there are thousands of programming languages that have been
created under the application of multiple forms of operation and implementation
areas, so it is impossible to get to know each of these in depth, which has generated
some programming languages with great potential are left in oblivion by the inability
to publicize its functionality, for this reason in this document is presented a study
that seeks to solve the main doubts that programmers have about one of these
languages that enjoys little popularity at the moment, Despite presenting a huge
potential in the development of diverse applications and intelligent systems.

Palabras Claves: Prolog, Paradigma de programación lógica, paradigma de programación relacional, paradigma de
programación declarativo , lenguaje de programación, modelo computacional.

específicas para implementar lo modelos


Introducción. generados.
De acuerdo a lo expuesto en [1] se entiende por
A medida que se desarrollan las técnicas de
programación como “la etapa entre la
abstracción y modelamiento de la realidad en
especificación de un sistema y el programa
ciencias de la computación se generaron
ejecutable que lo implementa ”, de acuerdo a
tendencias a desarrollar ciertas acciones bajo
esta definición en dicha etapa se diseña la
la aplicación de conceptos fundamentales, a
arquitectura y las abstracciones necesarias
esto se le denomina paradigma de
para modelar el sistema, para posteriormente
programación, entre los paradigmas de
codificarlo en un lenguaje de programación.
programación más comunes se tiene la
En un principio los lenguajes de programación programación imperativa, programación
se desarrollaron entorno a técnicas puntuales orientada a objetos, programación declarativa,
de abstracción que les otorgaron cualidades programación por paso de mensajes,
programación lógica entre muchas otras.
Estos paradigmas de programación generan posible que las maquinas repliquen este
mecanismos que les otorgan fortalezas y funcionamiento?
debilidades ante ciertas situaciones, por
Como respuesta a la anterior pregunta se
ejemplo, el paradigma de programación
desarrolló una nueva forma de programación
orientada a objetos que es de los más
la cual se define como la evolución de los
conocidos y utilizados presenta dificultad para
lenguajes de programación, ya que permite
atender problemas de concurrencia, problema
resolver problemas utilizando estructuras
que se resuelve de una forma muy natural en
lógicas de procesamiento.
la programación declarativa por paso de
mensajes mediante la aplicación del concepto Con lo anterior se define Prolog como un
de puerto. lenguaje de programación creado para
representar y utilizar el conocimiento sobre un
Debido a este tipo de situaciones se desarrollan
dominio especifico, entendiendo dominio
lenguajes de programación denominados
como un conjunto de objetos, y el
multiparadigmas, los cuales integran varios de
conocimiento representado como un conjunto
los paradigmas de programación en su
de relaciones que permiten establecer las
funcionamiento, con el fin de aumentar y
propiedades y relaciones internas de los
facilitar la implementación de dichos
objetos.
lenguajes en el mundo real.
En este documento se presenta un estudio
sobre Prolog, un lenguaje de programación
multiparadigmas. En este estudio se pretende ¡Donde es útil Prolog?
resolver las preguntas más frecuentes que se Prolog resulta de gran utilidad en sistemas
hacen los programadores frente a este lenguaje donde la complejidad del problema, su
de programación, razón por la cual se comportamiento dinámico o la explosión
estructuro el documento en forma de preguntas combinatoria no resulta posible o rentable una
que le permitan al lector tener un mayor solución convencional mediante
entendimiento sobre lo que se espera tratar. procesamiento de datos, son en general
problemas que implican un procedimiento de
solución basado en el conocimiento [3].
¿Qué es Prolog? Desde que se inició el desarrollo de sistemas
inteligentes se evidencio la falta de
Prolog del francés PROgramation LOGique,
flexibilidad de los lenguajes convencionales
es un lenguaje de programación lógica e
para enfrentar situaciones donde se requiere
interpretado utilizado principalmente en el
modelar conocimiento sobre un dominio
desarrollo de inteligencia artificial (IA) [2].
especifico, ya que esto conlleva a la
Este lenguaje de programación nace cuando a implementación de algoritmos
mediados de los 70 se empieza a crear una procedimentales de alta complejidad. Debido
forma de programación que no obedezca a esto se desarrolló los sistemas expertos (SE)
instrucciones algorítmicas o procedimentales, como una sub-rama de la inteligencia
es en este momento donde empiezan a artificial, estos sistemas permiten desarrollar
formularse las preguntas que definieron la programas que emulan la capacidad de tomar
filosofía de este lenguaje. Entre estas una de decisiones como lo haría un especialista
las que más impacto tuvo, establece que si el humano sobre un dominio especifico, esto se
hombre procesa más información por logra gracias a las características que presenta
inferencia lógica que por calculo entonces ¿es la arquitectura general de los SE la cual se basa
en la generación de reglas que relacionan un puede deducirse de la base de conocimiento,
conjunto de entradas bajo unas condiciones este demostrador de teoremas hace parte del
específicas con una salida [3]. intérprete de Prolog y se considera un
mecanismo de control del sistema.
Bajo este contexto los lenguajes de
programación que mejor se comportan son Con esta forma de trabajo el programador solo
aquellos que funcionan bajo el razonamiento debe especificar la lógica del programa sin
del paradigma de programación lógico, como tener en cuenta los distintos pasos de calculo
por ejemplo Prolog. que se ejecutan internamente, a esta forma de
trabajo, que resulta contraria a la
Otra de las aplicaciones donde se muestra un
programación procedimental se le denomina
uso extendido de Prolog son las bases de datos
programación relacional.
relacionales y deductivas, estas bases de datos
tienen una única interfaz que permite Otras aplicaciones donde se hace uso de
conmutar el conocimiento. La integración de Prolog son la Generación de CGI's, acceso a
Prolog en este tipo de bases de datos facilita la bases de datos desde páginas Web,
implementación de relaciones con formas paralización automática de programas,
lógicas, lo que hace que las consultas se programación distribuida y multiagente,
almacenen como vistas dinámicas y se añadan validación automática de programas,
reglas recursivas para la creación de nuevas procesamiento de lenguaje natural, entre
relaciones aumentando así la potencia y muchas otras.
utilidad del sistema [4].
¿Cómo es la sintaxis y la
semántica de Prolog?
¿Cómo funciona Prolog?
Para facilitar el entendimiento y motivar al
Como se expuso anteriormente Prolog es un lector a que consulte los aspectos más
lenguaje que actúa bajo la lógica de específicos de la sintaxis de este lenguaje, se
predicados, gracias a esto se han generado dos realizara a continuación una descripción sobre
estándares en cuanto a su uso, el DECsystem los componentes principales de esta mediante
10 PROLOG de Edimburgo y el PROLOG el desarrollo de un ejemplo tomado de [6].
descrito en el libro “Programing in Prolog” [5]
del cual se basan la mayoría de los dialectos En este ejemplo se desarrolla un programa que
Prolog aunque la mayoría mantienen el determine la sala más apropiada en un
DECsystem-10 PROLOG en su ámbito traslado, la sala será apropiada cuando no haya
lingüístico. En la práctica se mantiene una mejores. Como las salas no pueden ser
separación entre la lógica y los mecanismos de comparadas entre ellas se puede obtener varias
control que actúan en los programas salas apropiadas.
desarrollados con Prolog. La lógica se
Este programa contiene cinco predicados:
representa en forma de predicados, estos
predicados se pueden expresar como hechos, y Cambio,determina,print_cambio, libre y mejor
reglas que componen la base de conocimiento
o como preguntas que se le hacen a dicha base Como hechos están las salas (predicado libre)
de conocimiento. y una comparación de salas (predicado mejor).
libre(‘BB 64’).
Estas preguntas son gestionadas por el
libre(‘AA 73’).
denominado “demostrador de teoremas”, el libre(‘15569’).
cual comprueba si el predicado a demostrar libre(‘CC 08’).
libre(‘DD 62’). libre más apropiada son la unión de los motivos de
la sala libre y los motivos de la recursión. Para el
mejor( ‘BB 64’, ‘LZ 2669’, [‘es mayor’,’tiene encadenamiento de estas dos listas se precisa el
mejor distribución de espacio’]). predicado auxiliar append.
mejor( ‘AA 73’, ‘BB64’, [le da el sol]).
mejor( ‘CC 08’, ‘LZ 2669’,[‘está más cerca determina(Sala,Sala,[]):-
del ascensor’, ‘tiene cafetería’]). libre(Cualquiera),
mejor( ‘15569’, ‘AA 73’, [‘está más cerca not(mejor(Cualquiera,Sala,Motivo).)
de la cantina’]). este segundo caso finaliza la recursión, para
En el último predicado lo que se quiere decir todas aquellas salas libres (Cualquiera) se
es que la sala ‘15569’ es mejor que la sala ‘AA aplica que no son mejores como sala. Si es este
73’ porque está más cerca de la cantina. En el caso, entonces la sala apropiada es la misma
todos los demás predicados ambas salas tienen sala (el segundo parámetro de determina).
el mismo valor. El predicado es transitivo, es Entonces no hay motivos adicionales que
decir que ‘AA 73’ es mejor que ‘LZ 2669’ hablen a favor de esta sala.
porque es mejor que ‘BB 64’ y esta es mejor print_cambio es un predicado para la salida
que ‘LZ 2669’. El motivo de la superioridad de un resultado, el cual imprime la sala
de ‘AA 73’ es la unión de las dos cantidades antigua, la sala nueva y los motivos para un
de motivos [‘es mayor’, ‘tiene mejor nuevo traslado.
distribución de espacio’, ’le da el sol’].
write y nl son predicados que reciben el
El predicado mas importante es cambio. Este nombre de “built-in”, es decir se encuentran
determina los motivos para un cambio con implementados por defecto el sistema, el write
ayuda del predicado determina e imprime el imprime el valor de una constante o variable y
resultado mediante print_cambio. nl realiza un avance de línea.
cambio(Desde, Hacia):- print_cambio(Desde,Hacia,Motivos):-
determina(Desde,Hacia,Motivos), nl,
print_cambio(Desde,Hacia,Motivos). write(“Para un traslado de sala”),
Determina comprueba si una sala es apropiada write(Desde),
write(“ a la sala”),
para un traslado y memoriza los motivos
write(Hacia),
favorables a dicho traslado.
write(“se dan los siguientes motivos”),
determina(AntiguaSala, NuevaSala, nl,
MotivosdeNuevaSala):- write(Motivos),
libre(UnaSalaCualquiera), nl
mejor(UnaSalaCualquiera, AntiguaSala,
Explicado el ejemplo se pasa a describir la
Motivos1),
determina(UnaSalaCualquiera, sintaxis de este.
NuevaSala, Motivos2), Los predicados tienen una o más clausulas
append(Motivos1, Motivos2,
(libre(..) consta de 5 clausulas). Una clausula
MotivosdeNuevaSala).
parte siempre del nombre del predicado (libre)
Se busca una sala que este libre hasta el punto final, estas cláusulas pueden ser
(UnaSalaCualquiera), se comprueba si es mejor hechos como libre (‘15569’) o una regla como
que la sala antigua (AntiguaSala) y memoriza los
cambio(Desde, Hacia):-
motivos a favor de esta sala en Motivos1. Luego se
determina(Desde,Hacia,Motivos),
aplica de forma recursiva el predicado determina
print_cambio(Desde,Hacia,Motivos).
sobre esta sala libre y se busca para la sala libre una
sala más apropiada. Los motivos para la nueva sala
Una regla consta de cabecera de clausula propia documentos como el presentado en [5],
(cambio (Desde, Hacia)) y cuerpo de clausula donde se podrá encontrar mayor información sobre
(determina (Desde, Hacia, Motivos), los aspectos más detallados de la programación en
print_cambio(Desde, Hacia, Motivos)), que este lenguaje.
se separan con “:-”, los hechos solo poseen
cabecera. ¿Cuáles son los mecanismos más
La forma “:-” señaliza una aplicación lógica, importantes de la programación
aunque en el sentido contrario, si el cuerpo de
la cláusula es verdadero, entonces la cabecera en Prolog?
también será verdadera, el cuerpo de la Los mecanismos más importantes en la
cláusula es verdadero si y solo si todas sus programación con Prolog son:
partes son verdaderas. Un hecho por lo tanto
Recursividad, es la estructura más importante en
siempre será verdadero ya que carece de
el desarrollo de Prolog ya que en su sintaxis no
condiciones. existen los ciclos for y los while son de difícil
Un nombre de predicado, junto con la lista implementación debido a que en la programación
declarativa las variables solo pueden ser ligadas
entre paréntesis de sus parámetros, se define
una sola vez.
como su estructura.
Instanciación, es la unión de una variable a una
determina(Desde,Hacia,Motivos),
constante o estructura, después de la ligadura la
cada predicado posee, junto al nombre, una variable se comporta como una constante.
cantidad fija de parámetros. Verificación, con esto lo que se busca es
comprobar si la estructura de una pregunta es
Los símbolos que comienzan con minúscula o
verdadera o falsa desde la base de conocimiento.
tienen apostrofes, son constantes.
Unificación, es el componente principal de la
libre, ‘AA 73’ verificación de estructuras, y se establece que una
los símbolos que comienzan con mayúscula son estructura estará comprobada cuando puede ser
variables, las variables de una clausula son locales, unificada a un hecho, o cuando puede ser unificada
es decir que en otra clausula presentan un valor a la cabecera de una regla y las estructuras del
distinto. cuerpo de dicha regla pueden ser verificadas.

Desde, Hacia, Alguno.

La estructura de los datos con la que trabaja Prolog ¿Bajo qué paradigmas de
son las listas, estas constan de un corchete abierto
“[”, los elementos de la lista separados por “,” y un programación se construye Prolog?
corchete cerrado “]” que indica el final de la lista.
En el ejemplo anterior se observa que no hay
[‘es mayor’,’tiene mejor distribución de espacio’]. ligadura de variables con constantes hasta el
Los elementos de las listas pueden ser a su vez
final del proceso de ejecución del programa,
listas. esto se debe a que Prolog se construye sobre el
paradigma de programación declarativo,
Con este ejemplo se muestran los aspectos básicos paradigma en el cual la ligadura de variables
que componen la sintaxis y semántica de Prolog, solo se puede hacer una sola vez y esta
demostrando con una aplicación rápida el potencial
permanece igual hasta el final de la ejecución,
que presenta la progrmacion lógica para tratar
como si de una constante se tratara, por esta
situaciones donde una estructura procedimental
tendría una extensa codificación, de igual forma se razón como se mencionó en la pregunta
incita al lector para que consulte por iniciativa anterior la recursividad se convierte en la
Muchas de las afirmaciones en esta página,
adolecen de una sustentación mas clara y
profunda.

estructura más importante del lenguaje de Aunque estos paradigmas pueden ser
programación, ya que le permite a este recorrer alcanzados mediante la implementación de
las listas sin generar ligadura en las variables. Shell cabe tener presente que son conceptos
que no hacen parte de la naturaleza de Prolog
Ante esta situación Prolog extiende el
y por tanto no ofrecen un funcionamiento
paradigma de programación declarativo
natural, de igual forma resulta muy útil su
mediante la implementación del concepto de
implementación ya que permite extender las
escogencia no determinística, y el concepto de
aplicaciones que se desarrollen entorno a este
espacio computacional, al paradigma de
lenguaje.
programación relacional, con el objetivo de
hacer la relación entre las variables las
constantes y las estructuras, de acuerdo a lo
establecido por las reglas. Conclusiones
Hasta este punto se encuentran los paradigmas De acuerdo a lo expuesto hasta este punto se
de programación que funcionan de forma concluye:
natural con el lenguaje Prolog, ya que los
demás paradigmas de programación funcionan  Prolog es un lenguaje de programación
en Prolog gracias al uso de Shell que permiten poderoso que permite desarrollar
extender nuevos paradigmas gracias a la aplicaciones basadas en las reglas,
aplicación de conceptos como el de hilo que le propiedades y relaciones presentes en una
permite extender el paradigma de base de conocimiento.
programación declarativa concurrente.  Presenta gran influencia en el desarrollo
de inteligencias artificiales,
Del mismo modo al incluir el concepto de principalmente en el desarrollo de
estado explícito y de celda se alcanza el sistemas expertos.
paradigma de programación con estados.  La sintaxis y semántica resultan muy
naturales y de fácil aprendizaje si se
Con la integración del concepto puerto, al de
cuenta con una lógica relacional bien
estado explícito y el de celda se alcanza el
establecida.
paradigma de programación concurrente por
 Es vital tener bien definidas las reglas,
paso de mensajes.
relaciones y hechos antes de empezar la
Finalmente, el paradigma de programación programación de sistemas en Prolog, ya
orientado a objetos, se alcanza de forma que esto define la forma en la que se
inmediata al alcanzar el paradigma de codificara el programa.
programación por paso de mensajes, ya que  Se desarrolló bajo paradigmas de
este le ofrece todos los mecanismos necesarios programación que permiten una fácil
para crear una estructura procedimental que le extensión a nuevos conceptos de
permita establecer abstracciones de datos en programación, por lo que las Shell
forma de objetos y generar estados explícitos, desarrolladas para este lenguaje de
polimorfismo o herencia. programación presentan un muy buen
comportamiento.
Referencias

[1] S. H. Peter Van Roy, Conceptos, T´ecnicas y Modelos, London, England, 2004.

[2] P. R. Alain Colmerauer, La naissance de Prolog, Editions universitaires europeennes , 2014.

[3] D. Nebendahl, Sistemas Expertos, Ingenieria y Comunicacion, Barcelona: Marcombo S.A, 1992.

[4] A. M. R. G. Juan Luis Franco M, «bases de datos relacionnales y deductivas,» Madrid, 2004.

[5] C. S. M. Willian F Clocksin, Programing in prolog, Oxford: Springer, 2003.

[6] D. Nebendahl, «Sistemas Expertos Ingenieria y comunicacion,» de Lenguajes y sistemas de


programacion, Marcombo, 1992, pp. 92-94.

También podría gustarte