Sunteți pe pagina 1din 13

Contenido

Prolog y sus Antecedentes ...................................................................................... 2


Paradigma de Programacin ................................................................................... 4
Descripcin .............................................................................................................. 4
Ventajas .................................................................................................................. 5
Desventajas ............................................................................................................. 6
Uso de Prolog .......................................................................................................... 7
Inteligencia artificial .............................................................................................. 7
Sistemas expertos................................................................................................ 7
Compiladores ....................................................................................................... 8
Estructura de un programa en Prolog ..................................................................... 8
Operadores Aritmticos ........................................................................................... 9
Operadores lgicos ................................................................................................. 9
Variables ................................................................................................................. 9
Ejemplos................................................................................................................ 10
Principales compiladores e intrpretes de Prolog ................................................. 12
Bibliografa ............................................................................................................ 13



2
Prolog y sus Antecedentes
El Prolog o PROLOG, proviene del francs PROgrammation en LOGique
(programacin en lgica), es un lenguaje para programas artefactos electrnicos
mediante el paradigma lgico con tcnicas de produccin final interpretada, es
bastante conocido en el rea de la Ingeniera Informtica para investigacin en
inteligencia artificial.
Se trata de un lenguaje de programacin ideado a principios de los aos 70 en la
Universidad de Aix-Marseille I (Marsella, Francia) por los profesores Alain
Colmeraurer y Philippe Roussel. Naci de un proyecto que no tena como objetivo
la implementacin de un lenguaje de programacin, si no el procedimiento de
lenguajes naturales Alain Colmeraurer y Robert Pasero trabajaban en la parte del
procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de
deduccin e inferencia del sistema. Interesado por el mtodo de resolucin SL,
Trudel persuadi a Robert Kowalski para que se uniera al proyecto, dando lugar a
una versin preliminar del lenguaje Prolog a finales de 1971 y apareciendo la
versin definitiva en 1972. Esta primera versin de prolog fue programada en
ALGOL W.
Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983,
David H.D. Warren desarrollo un compilador capaz de traducir Prolog en un
conjunto de instrucciones en un conjunto de una maquina abstracta denominada
Warren Abstrac Machine, o abreviadamente, WAM. Desde entonces Prolog es
un lenguaje semi-interpretado.
Si bien en un principio se trataba de un lenguaje de uso reducido, la aparicin de
intrpretes del mismo para microordenadores de 8 bits (ej.: micro-PROLOG) y
para ordenadores domsticos de 16 bits (ej.: Turbo Prolog de Borland, entre
muchos otros) a lo largo de la dcada de 1980 contribuyo notablemente a su
popularizacin. Otro importante factor en su difusin fue la adopcin del mismo
para el desarrollo del proyecto de la Quinta Generacin de Computadoras a
principios de la dcada de los 80, en cuyo contexto se desarroll la

3
implementacin paralelizada del lenguaje llamada KL1 Y del que deriva parte del
desarrollo moderno Prolog.
Las primeras versiones del lenguaje diferirn, en sus diferentes implementaciones,
en muchos aspectos de sus sintaxis, emplendose mayormente como forma
normalizada el dialecto propuesto por la universidad de Edimburgo, hasta que en
1995 se estableci un estndar ISO (ISO/IEC 13211-1), llamado ISO-Prolog.
Prolog, se enmarca en el paradigma de los lenguajes lgicos y declarativos, lo que
lo diferencia enormemente de otros lenguajes ms populares como Fortran,
Pascal, C o Java.
En los lenguajes de programacin antes mencionados, las instrucciones se
ejecutan normalmente en orden secuencial, es decir, una a continuacin de otra,
en el mismo orden en que estn escritas, que solo varia cuando se alcanza una
instruccin de control (un bucle, una instruccin condicional o una transferencia).
Los programas en Prolog se componen de clusulas de Horn que constituyen
reglas del tipo modus ponendo ponens, es decir, si es verdad el antecedente,
entonces es verdad el consecuente. No obstante, la forma de escribir las
clusulas de Horn es al contrario de lo habitual. Primero se escribe el consecuente
y luego el antecedente. El antecedente puede ser una conjuncin de condiciones
que se denomina secuencia de objetivos. Cada objetivo se separa con una coma y
puede considerarse similar a una instruccin o llamada a procedimiento de los
lenguajes imperativos. En Prolog no existen instrucciones de control. Su ejecucin
se basa en dos conceptos; la unificacin y el Back Tracking.
Gracias a la unificacin, cada objetivo determina un subconjunto de clusulas
susceptibles de ser ejecutadas. Cada una ellas se denominan punto de eleccin.
Prolog selecciona el primer punto de eleccin y sigue ejecutando el programa
hasta determinar si el objetivo es verdadero o falso.
En caso de ser falso entra en juego el back tracking, que consiste en deshacer
todo lo ejecutado situado en el mismo estado en el que estaba justo antes de

4
llegar al punto de eleccin. Entonces se toma el siguiente punto de eleccin que
estaba pendiente y se repite de nuevo el proceso. Todos los objetivos terminan en
su ejecucin bien en xito (verdadero), bien en fracaso (falso). (Cruz, 2012)
Paradigma de Programacin
Cuando se piensa en programacin, lo que usualmente viene a la mente son
funciones, ciclos, condicionales y variables. Conocemos los lenguajes C, C++,
Java, C# y dems. Pensamos en algoritmos; una secuencia de pasos apoyados
por estructuras de control. El paradigma Imperativo de programacin es sin duda,
el ms utilizado y conocido por la mayora de la gente. Pocas veces nos
imaginamos un lenguaje de programacin en donde no necesitemos decirle a la
computadora una secuencia de instrucciones; donde el flujo de control sea
irrelevante y no necesitemos de For, If, llamadas a mtodos y dems artilugios de
la programacin imperativa.
El prolog usa el paradigma de programacin declarativo, lleva este nombre
porque el programador declara lo que debe resultar del cmputo; en contraste con
ordenar como se debe llegar al resultado. Es decir, describimos el problema de
implementar un algoritmo para su solucin.
Una rama del paradigma declarativo es la programacin lgica; estrechamente
ligada a la inteligencia artificial. Programacin lgica significa definir hechos y
relaciones combinados con lgica matemtica para describir la solucin al
problema.
Prolog es probablemente el lenguaje lgico ms conocido en la actualidad.
Actualmente existen muchas implementaciones de prolog, las cuales pueden ser
descargadas, como SWI-Prolog. (Ferreira, 2012)
Descripcin
Prolog es un lenguaje simple, pero poderoso. Se basa en nociones matemticas
de relaciones de inferencia. Es un lenguaje declarativo e interpretado, esto quiere

5
decir que el lenguaje se usa para representar conocimientos sobre un determinado
dominio y las relaciones entre objetos de ese dominio.
Un programa en prolog consiste de una base de datos de relaciones lgicas y
detalles que se cumplen para la aplicacin. Dicha base de datos no tiene una
estructura impuesta, ni un procedimiento o clase principal. Los datos y relaciones
de un programa en Prolog se escriben en un nico archivo, el cual es consultado
por el programa cuando se le hace una pregunta.
Escribir un programa en prolog consiste en declarar el conocimiento disponible
acerca de los objetos adems de sus relaciones y sus reglas. En lugar de correr
en un programa para obtener una solucin, se hace una pregunta, el programa
revisa la base de datos para encontrar la solucin a la pregunta. Si existe ms de
una solucin, Prolog hace Back tracking para encontrar soluciones distintas. El
propio sistema es el que deduce las respuestas a las preguntas que se le plantean,
dichas respuestas las deduce del conocimiento obtenido por el conjunto de reglas
dadas.
La ejecucin de Prolog consiste en una bsqueda en profundidad de un rbol
conteniendo todas las posibles soluciones. Para cada una de ellas se evaluara su
validez. La estructura de un programa en Prolog es lgica y directa. (Kathryn M.
Jones Prez, 2007)
Ventajas
La habilidad de PROLOG para calcular de forma procedural es una de las
ventajas especficas que tiene el lenguaje. Como consecuencia esto anima
al programador a considerar el significado declarativo de los programas de
forma relativamente independiente de su significado procedural. Es decir,
las ventajas de la forma declarativa de este lenguaje son claras (es ms
fcil pensar las soluciones y muchos detalles procedurales son resueltos
automticamente por el propio lenguaje) y podemos aprovecharlas.
Una ventaja desde el punto de vista del usuario es la facilidad para
programar ya que se pueden escribir programas rpidamente, con pocos

6
errores originando programas claramente legibles, aun si no se conoce muy
bien el lenguaje.
No hay que pensar demasiado en la solucin del problema, ya que Prolog
infiere sus respuestas basndose en las reglas declaradas dentro del
programa.
Modularidad; cada predicado (procedimiento) puede ser ejecutado, validado
y examinado independiente e individualmente. Prolog no tiene variables
globales, ni asignacin. Cada relacin esta auto contenida, lo que permite
una mayor modularidad, portabilidad y reusabilidad de relaciones entre
programas.
Polimorfismo; se trata de un lenguaje de programacin sin tipos, lo que un
alto nivel de abstraccin e independencia de los datos (objetos).
En Prolog, se puede representar incluso los mismos programas Prolog
como estructuras.
Prolog utiliza un mecanismo de bsqueda independiente de la base de
hechos. Aunque pueda parecer algo retorcido, es una buena estrategia
puesto que garantiza el proceso de todas las posibilidades. Es til para el
programador conocer dicho mecanismos a la hora de depurar y optimizar
los programas.
Manejo dinmico y automtico de memoria.
En Prolog se utiliza notacin prefija e infija mientras que en Lisp solo utiliza
notacin prefija.
Desventajas
La resolucin automtica no siempre es eficiente, por lo que eventualmente
se podra dar respuesta incorrecta a una consulta.
Poco eficiente.
Poco utilizado en aplicaciones reales.
Prolog algunas veces es incapaz de reconocer que un problema es (para su
propio conocimiento) inaplicable o insuficiente. Si el programa no contiene

7
suficiente informacin para contestar una consulta, es incapaz de
reconocerlo y responde no. En esta situacin ser ms eficiente conocer
que la respuesta no es negativa, si no que no es posible inferir un resultado.
Los motores de inferencia poseen algunos lmites (Prolog (Programacion
Logica)).
Ciertos problemas estn ligados a la representacin del conocimiento, que
prolog no posee. (Kathryn M. Jones Prez, 2007)
Uso de Prolog
Prolog se puede utilizar para resolver, bsicamente cualquier tipo de problema.
Principalmente es til en la gestin de juegos, en inteligencia artificial y sistemas
expertos, como lenguaje especialmente pensado para construir bases de
conocimientos basados en la lgica que forman parte importante de cualquier
agente inteligente, en la construccin de Compiladores e intrpretes, en el
reconocimiento del Lenguaje Natural, tambin en diversos campos, incluyendo
finanzas, defensa, telecomunicaciones, medicina, agricultura, ingeniera,
manufactura y educacin. As mismo tambin como interfaces de idiomas en los
que busca en la base de datos para responder un pregunta.
Inteligencia artificial
La resolucin de juegos y la planificacin as como la construccin de agentes
inteligentes constituyen amplios campos que abarca la rama de la inteligencia
artificial. La facilidad con la que se pueden plasmar especificaciones de los
problemas directamente, utilizando una sintaxis que nos proporciona un alto grado
de abstraccin. Esto aporta una gran ventaja a la hora de realizar el desarrollo de
la aplicacin una vez analizando el problema y diseada su solucin.
Sistemas expertos
Los agentes y sistemas expertos se pueden considerar entes capaces de actuar
como lo hara un experto humano en la resolucin de un determinado problema.
Pueden percibir el ambiente mediante sensores y actan sobre ese ambiente por

8
medio de efectores. En los agentes hardware, los sensores son sustituidos por
cmaras y telmetros y los efectores reemplazados mediante motores. En los
agentes software, las precepciones y acciones vienen a ser las cadenas de bits
codificados.
Compiladores
La comprensin del lenguaje natural y la construccin de compiladores e
intrpretes son campos de desarrollo muy adecuados para Prolog.
En Prolog se puede especificar un autmata finito mediante tres hechos,
simplemente. El predicado inicial, inicial (Q), es true si Q es el estado inicial. El
predicado final (Q) es true si Q es el estado final. Y el predicado delta (Q, X, Q1)
que funciona del siguiente modo: es true si el autmata cambia del estado Q al
estado Q1 al recibir el smbolo X. El autmata recibe una cadena de smbolos del
alfabeto S *. El autmata reconoce el lenguaje si comenz en el estado inicial y
acab en el estado final tras seguir las transiciones especificadas por.
(Aplicaciones al Lenguaje Prolog)
Estructura de un programa en Prolog
La sintaxis de prolog incluye;
Hechos: es un hecho del lenguaje cotidiano. En el lenguaje normal, una
proposicin puede ser hace calor.
Reglas: las capacidades del programa. Estas son consultadas al hacer una
consulta para verificar su validez o invalidez.
Variables: representan objetos que el mismo Prolog determina. Una
variable puede estar instanciada o no instanciada.
Consultas: es la accin de hacerle una pregunta al programa sobre la
informacin contenida en la base de datos. Una pregunta podra sencilla
podra ser: ?- hace calor. Una respuesta podra ser; si, seguido por el
prompt; ?-. Un si significa que la pregunta es consistente con la

9
informacin contenida en la base de datos. Si no existe suficiente, responde:
no. (Kathryn M. Jones Prez, 2007)
Operadores Aritmticos
+: Suma
-: Resta
*: Multiplicacin
/: Divisin
//: Divisin de enteros (truncada)
Mod: Resto de la divisin
**: Potenciacin.
Operadores lgicos
Not: Negacin
\+: no probable
, : conjuncin lgica
; : disyuncin lgica
:- : implicacin lgica
-> : If- then else
Variables
Las variables se utilizan para describir hechos y reglas generales. Los nombres de
las variables deben comenzar con letra mayscula o con el carcter (_). Existe
una variable especial, la variable annima o blanca. Esta variable se utiliza de la
misma manera que las dems variables pero nunca toma ningn valor.


10
Ejemplos
1. Parentesco
padrede('juan', 'maria'). % juan es padre de maria
padrede('pablo', 'juan'). % pablo es padre de juan
padrede('pablo', 'marcela'). % pablo es padre de marcela
padrede('carlos', 'debora'). % carlos es padre de devora
% A es hijo de B si B es padre de A
hijode(A,B) :- padrede(B,A).
% A es abuelo de B si A es padre de C y C es padre B
abuelode(A,B) :-
padrede(A,C),
padrede(C,B).
% A y B son hermanos si el padre de A es tambin el padre de B y si A y
B no son lo mismo
hermanode(A,B) :-
padrede(C,A) ,
padrede(C,B),
A \== B.
% A y B son familiares si A es padre de B o A es hijo de B o A es
hermano de B
familiarde(A,B) :-
padrede(A,B).
familiarde(A,B) :-
hijode(A,B).
familiarde(A,B) :-
hermanode(A,B).
%%
%% consultas
%%
% juan es hermano de marcela?

11
?- hermanode('juan', 'marcela').
yes
% carlos es hermano de juan?
?- hermanode('carlos', 'juan').
no
% pablo es abuelo de maria?
?- abuelode('pablo', 'maria').
Yes
2. Factorial

% La sintaxis es factorial(N, F) -> Factorial de N es F (el resultado se guarda en F)
factorial(0, 1).
factorial(1, 1).
factorial(N, F) :- N>0, N1 is N - 1, factorial(N1, F1), F is N * F1.
%el factorial se llama recursivamente dejando el resultado en F

3. Sobre una base de datos de contribuyentes, queremos definir los
contribuyentes normales como aquellos que;
No son extranjeros.
Si estn casados, su cnyuge no ingresa ms de 2000.
En otro caso, sus ingresos propios estn entre 700 y 2000.
Solucin;
cont_normal(X) :- extranjero(X), ! , fail.
cont_normal(X) :-
casado(X,Y) , ingresos(Y,Ing), Ing>2000 , ! , fail.
cont_normal(X) :-
ingresos(X,Ing) , Ing>700, Ing<2000.

12
Principales compiladores e intrpretes de Prolog
Para que el uso de programas lgicos pueda aplicarse al desarrollo de software
moderno, es necesario que sean verdaderos componentes lgicos que puedan
utilizarse desde entornos como .NET, JSP, Delphi, Java, etc. Muchas
implementaciones actuales de Prolog proveen mecanismos para invocar
programas Prolog desde otros ambientes. El entorno Amzi! Prolog + Logic
Server brinda una integracin total multiplataforma con los ambientes ms
conocidos. Adems, podemos invocar desde Prolog rutinas hechas en otros
lenguajes, mediante predicados extendidos (as Prolog puede actualizar, por
ejemplo, el estado de un botn en pantalla habilitndolo o no dependiendo de un
complejo conjunto de relaciones lgicas). Naturalmente, existen diversos IDEs
muy completos para el desarrollo de programas Prolog: El Amzi! Utiliza Eclipse,
muy conocido por la comunidad Java.


13
Bibliografa
Aplicaciones al Lenguaje Prolog. (s.f.). Recuperado el 24 de Mayo de 2014, de
http://www.uhu.es/nieves.pavon/pprogramacion/temario/tema4/tema4.html
Cruz, P. R. (22 de Marzo de 2012). Recuperado el 24 de Mayo de 2014, de
http://pattymackel.blogspot.mx/2012/03/historia-prolog.html
Ferreira, A. (30 de Enero de 2012). Recuperado el 24 de Mayo de 2014, de
http://www.paradigmas.mx/prolog-una-introduccion-a-la-programacion-
logica/
Kathryn M. Jones Prez, G. A. (4 de Diciembre de 2007). Introduccin al Lenguaje
de Programacin Lgica; Prolog. San Jos, Costa Rica.
Prolog (Programacion Logica). (s.f.). Recuperado el 24 de mayo de 2014, de
http://www.ecured.cu/index.php/Prolog_

S-ar putea să vă placă și