PROLOG

Historia de PROLOG

Se trata de un lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille (Marsella, Francia) por los profesores Alain Colmerauer y Philippe Roussel. Nació de un proyecto que no tenía como objetivo la implementación de un lenguaje de programación, sino el procesamiento de lenguajes naturales. Alain Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de deducción e inferencia del sistema. Interesado por el método de resolución SL, Trudel persuadió a Robert Kowalski para que se uniera al proyecto, dando lugar a una versión preliminar del lenguaje Prolog a finales de 1971 y apareciendo la versión definitiva en 1972. Esta primera versión de Prolog fue programada en ALGOL W.

Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarrolló un compilador capaz de traducir Prolog en un conjunto de instrucciones de una máquina abstracta denominada Warren Abstract 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 aparición de intérpretes del mismo para microordenadores de 8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits (ej: Turbo Prolog de Borland, entre otros muchos) a lo largo de la década de 1980 contribuyó notablemente a su popularización. Otro importante factor en su difusión fue la adopción del mismo para el desarrollo del proyecto de la quinta generación de computadoras a principios de la década de los 80,[5] en cuyo contexto se desarrolló la implementación paralelizada del lenguaje llamada KL1 y del que deriva parte del desarrollo moderno de Prolog.

Las primeras versiones del lenguaje diferían, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis, empleándose mayormente como forma normalizada el dialecto propuesto por la Universidad de Edimburgo, hasta que en 1995 se estableció un estándar ISO (ISO/IEC 13211-1), llamado ISO-Prolog.

Prolog se enmarca en el paradigma de los lenguajes lógicos y declarativos, lo que lo diferencia enormemente de otros lenguajes más populares tales como Fortran, Pascal, C o Java.

El papel de PROLOG.

La Quinta Generación prevé máquinas diseñadas para el tratamiento lógico, de capacidades análogas a las capacidades de anteriores generaciones de ordenadores para tratar operaciones aritméticas. Se trata de ordenadores que tienen el PROLOG como lenguaje nativo (lenguaje máquina), con capacidad para procesar millones de inferencias lógicas por segundo (LIPS).

Programación Lógica.

La programación lógica es un paradigma de los lenguajes de programación en el cual los programas se consideran como una serie de aserciones lógicas. De esta forma, el conocimiento se representa mediante reglas, tratándose de sistemas declarativos. Una representación declarativa es aquélla en la que el conocimiento está especificado, pero en la que la manera en que dicho conocimiento debe ser usado no viene dado. El más popular de los sistemas de programación lógica es el PROLOG.

La programación lógica en PROLOG.

Un programa escrito en PROLOG puro, es un conjunto de claúsulas de Horn. Sin embargo, PROLOG, como lenguaje de programación moderno, incorpora más cosas, como instrucciones de Entrada/Salida, etc.

Una claúsula de Horn puede ser ó bien una conjunción de hechos positivos ó una implicación con un único consecuente (un único termino a la derecha). La negación no tiene representación en PROLOG, y se asocia con la falta de una afirmación (negación por fallo), según el modelo de suposición de un mundo cerrado (CWA); solo es cierto lo que aparece en la base de conocimiento ó bien se deriva de esta.

Las diferencias sintácticas entre las representaciones lógicas y las representaciones PROLOG son las siguientes:
* En PROLOG todas las variables están implícitamente cuantificadas universalmente.
* En PROLOG existe un símbolo explicito para la conjunción “y” (“,”), pero no existe uno para la disyunción “o”, que se expresa como una lista de sentencias alternativas.
* En PROLOG, las implicaciones p –> q se escriben alrevés q :- p, ya que el interprete siempre trabaja hacia atrás sobre un objetivo, como se vera más adelante.

El lenguaje de programación PROLOG.

PROLOG puede encontrarse en múltiples versiones diferentes. La más popular es la definida por Clocksin y Mellish, y es la que se tratará aquí. Afortunadamente, al ser tan sencilla la sintaxis del PROLOG, las variaciones entre distintas implementaciones son mínimas. Los elementos fundamentales de un programa PROLOG son los siguientes:

Hechos.

Expresan relaciones entre objetos. Supongamos que queremos expresar el hecho de que “un coche tiene ruedas”. Este hecho, consta de dos objetos, “coche” y “ruedas”, y de una relación llamada “tiene”. La forma de representarlo en PROLOG es: tiene(coche,ruedas).
* Los nombres de objetos y relaciones deben comenzar con una letra minúscula.
* Primero se escribe la relación, y luego los objetos separados por comas y encerrados entre paréntesis.
* Al final de un hecho debe ir un punto (“.”).

El orden de los objetos dentro de la relación es arbitrario, pero debemos ser coherentes a lo largo de la base de hechos.

Variables.

Representan objetos que el mismo PROLOG determinar . Una variable puede estar instanciada ó no instanciada. Estar instanciada cuando existe un objeto determinado representado por la variable. De este modo, cuando preguntamos “¿ Un coche tiene X ?”, PROLOG busca en los hechos cosas que tiene un coche y respondería: X = ruedas.
instanciando la variable X con el objeto ruedas.
* Los nombres de variables comienzan siempre por una letra mayúscula.

Un caso particular es la variable anónima, representada por el carácter subrayado (“_”). Es una especie de comodín que utilizaremos en aquellos lugares que debería aparecer una variable, pero no nos interesa darle un nombre concreto ya que no vamos a utilizarla posteriormente.

Reglas.

Las reglas se utilizan en PROLOG para significar que un hecho depende de uno ó mas hechos. Son la representación de las implicaciones lógicas del tipo p —> q (p implica q).
* Una regla consiste en una cabeza y un cuerpo, unidos por el signo “:-“.
* La cabeza está formada por un único hecho.
* El cuerpo puede ser uno ó mas hechos (conjunción de hechos), separados por una coma (“,”), que actúa como el “y” lógico.
* Las reglas finalizan con un punto (“.”).

La cabeza en una regla PROLOG corresponde al consecuente de una implicación lógica, y el cuerpo al antecedente. Este hecho puede conducir a errores de representación. Supongamos el siguiente razonamiento lógico:

tiempo(lluvioso) —-> suelo(mojado)
suelo(mojado)

Que el suelo está, mojado, es una condición suficiente de que el tiempo sea lluvioso, pero no necesaria. Por lo tanto, a partir de ese hecho, no podemos deducir mediante la implicación, que está, lloviendo (pueden haber regado las calles). La representación correcta en PROLOG, sería:

suelo(mojado) :- tiempo(lluvioso).
suelo(mojado).

Adviértase que la regla está “al revés”. Esto es así por el mecanismo de deducción hacia atrás que emplea PROLOG. Si cometiéramos el error de representarla como:

tiempo(lluvioso) :- suelo(mojado).
suelo(mojado).

PROLOG, partiendo del hecho de que el suelo está mojado, deduciría incorrectamente que el tiempo es lluvioso.

Para generalizar una relación entre objetos mediante una regla, utilizaremos variables. Por ejemplo:
Representación lógica
es_un_coche(X) —-> tiene(X,ruedas)

Representación PROLOG
tiene(X,ruedas) :- es_un_coche(X).

Con esta regla generalizamos el hecho de que cualquier objeto que sea un coche, tendrá ruedas. Al igual que antes, el hecho de que un objeto tenga ruedas, no es una condición suficiente de que sea un coche. Por lo tanto la representación inversa sería incorrecta.

El ámbito de las variables.
Cuando en una regla aparece una variable, el ámbito de esa variable es únicamente esa regla. Supongamos las siguientes reglas:

(1) hermana_de(X,Y) :- hembra(X), padres(X,M,P), padres(Y,M,P).
(2) puede_robar(X,P) :- ladron(X), le_gusta_a(X,P), valioso(P).

Aunque en ambas aparece la variable X (y la variable P), no tiene nada que ver la X de la regla (1) con la de la regla (2), y por lo tanto, la instanciación de la X en (1) no implica la instanciacion en (2). Sin embargo todas las X de una misma regla sí que se instanciarán con el mismo valor.

Operadores.

Son predicados predefinidos en PROLOG para las operaciones matemáticas básicas. Su sintaxis depende de la posición que ocupen, pudiendo ser infijos ó prefijos. Por ejemplo el operador suma (“+”), podemos encontrarlo en forma prefija ‘+(2,5)’ ó bien infija, ‘2 + 5’. También disponemos de predicados de igualdad y desigualdad.
Los operadores son:
X = Y igual
X \= Y distinto
X < Y menor X > Y mayor
X =< Y menor ó igual X >= Y mayor ó igual

Al igual que en otros lenguajes de programación es necesario tener en cuenta la precedencia y la asociatividad de los operadores antes de trabajar con ellos.

En cuanto a precedencia, es la típica. Por ejemplo, 3+2*6 se evalúa como 3+(2*6). En lo referente a la asociatividad, PROLOG es asociativo por la izquierda. Así, 8/4/4 se interpreta como (8/4)/4. De igual forma, 5+8/2/2 significa 5+((8/2)/2).

El operador ‘is’.

Es un operador infijo, que en su parte derecha lleva un término que se interpreta como una expresión aritmética, contrastándose con el término de su izquierda.

Por ejemplo, la expresión ‘6 is 4+3.’ es falsa. Por otra parte, si la expresión es ‘X is 4+3.’, el resultado será la instanciación de X:

X = 7

Una regla PROLOG puede ser esta:

densidad(X,Y) :- poblacion(X,P), area(X,A), Y is P/A.

Instalación de prolog:

Para instalar prolog en ubuntu desde la terminal (con CTRL+ALT+T) escribimos:

sudo apt-get install swi-prolog

Escribimos la clave y listo inicia la instalación.

Creación del primer programa en prolog:

Bueno lo primero que vamos a hacer es crear el directorio donde vamos a crear nuestros programas de prolog por ejemplo en mi caso estoy en la carpeta de usuario por default voy a crear un directorio en donde voy a guardar mis programas en prolog escribo en la terminal:

Para visualizar los directorios.

ls

Creo el directorio de programas.

mkdir programas

Entro al directorio programas.

cd programas

Creo el directorio prolog.

mkdir prolog

Entro al directorio de prolog.

cd prolog

En el directorio prolog abro un editor pero le asigno el nombre y la extensión de prolog (pro o pl) quedaría de la siguiente manera:

gedit alumnoslove.pro

Y le inserto el siguiente código:

quiere_a(cherly,carlos).
quiere_a(karen,rafa).
quiere_a(cherly,rafa).
quiere_a(gaby,josmar).
quiere_a(karen,gustavo).
quiere_a(hilsa,alvaro).
quiere_a(ricardo,gaby).
quiere_a(karen,hilsa).
quiere_a(hilsa,karen).
quiere_a(cherly,ruben).
varon(carlos).
varon(rafa).
varon(josmar).
varon(ruben).
varon(ricardo).
varon(gustavo).
varon(alvaro).
hembra(karen).
hembra(hilsa).
hembra(gaby).
hembra(cherly).
teme_a(alvaro,ruben).
teme_a(ricardo,karen).
teme_a(ricardo,gaby).
teme_a(ricardo,hilsa).
teme_a(rafa,gustavo).
/* Las condiciones */
quiere_pero_teme_a(X,Y) :- quiere_a(X,Y), teme_a(X,Y).
querido_por(X,Y) :- quiere_a(Y,X).
puede_casarse_con(X,Y) :- quiere_a(X,Y), varon(X), hembra(Y).
puede_casarse_con(X,Y) :- quiere_a(X,Y), hembra(X), varon(Y).

Este es otro ejemplo gedit familia.pro:

padre(emilio,elfego).
padre(rebeca,elfego).
esposo(trinidad,elfego).
hija(rebeca,maria).
hija(emilio,valentina).
hijo(emilio,maxi).
hijo(emilio,emiliano).
hijo(rebeca,ronaldo).
varon(maxi).
varon(emiliano).
varon(emilio).
varon(elfego).
varon(ronaldo).
mujer(trinidad).
mujer(rebeca).
mujer(valentina).
mujer(maria).
madre(Z,Y):-padre(Z,X),esposo(Y,X).
tio(Z,A):-hijo(B,Z),padre(A,X),padre(B,X),varon(A),mujer(B).
tio(Z,A):-hija(B,Z),padre(A,X),padre(B,X),varon(A),mujer(B).
tia(Z,A):-hijo(B,Z),padre(A,X),padre(B,X),varon(B),mujer(A).
tia(Z,A):-hija(B,Z),padre(A,X),padre(B,X),varon(B),mujer(A).
sobrino(A,Z):-hijo(B,Z),padre(A,X),padre(B,X),varon(Z),A\=B.
sobrino(A,Z):-hija(B,Z),padre(A,X),padre(B,X),varon(Z),A\=B.
sobrina(A,Z):-hijo(B,Z),padre(A,X),padre(B,X),mujer(Z),A\=B.
sobrina(A,Z):-hija(B,Z),padre(A,X),padre(B,X),mujer(Z),A\=B.
hermano(B,A):-padre(A,X),padre(B,X),varon(A),mujer(B),A\=B.
hermana(A,B):-padre(A,X),padre(B,X),varon(A),mujer(B),A\=B.
hermanode(A,B):-hijo(X,A),hijo(X,B),A\=B.
hermanode(B,A):-hijo(X,A),hija(X,B),varon(A),mujer(B),A\=B.
abuelo(Z,X):-hijo(Y,Z),padre(Y,X).
abuelo(Z,X):-hija(Y,Z),padre(Y,X).
abuela(Z,X):-hijo(Y,Z),madre(Y,X).
abuela(Z,X):-hija(Y,Z),madre(Y,X).

Bibliografía:

http://es.wikipedia.org/wiki/Prolog

http://www.programatium.com/prolog.htm

http://www.elcodigok.com.ar/2008/09/instalar-swi-prolog-en-ubuntu/

http://proton.ucting.udg.mx/tutorial/prolog/index.htm

Descargar información:

Documento de prolog da clic aquí para descargar

Anuncios

10 respuestas a PROLOG

  1. PROLOG es un lenguaje de programacion en que podemos elaborar programas, PROLOG no es nada amigable ya que ésta se maneja atravez de puros comando y está diseñado ala lógica, existen varias versiones de prolog y para S.O. diferentes. PROLOG es de la quinta generacion. la version más usada de prolog es la Clocksin y Mellish, por ser la más amigable y facil de usar.

    ATTE: CARLOS JOEL GRIJALVA PAZ

  2. skab17 dijo:

    hola……………….
    Es un programa entendible mientras se tenga instalado el programa prolog se complica mientras
    se tenga errores pero mientras se tenga las herramientas y el entendimiento necesario es entendible y facil de trabajar en el……………

    buena clase profe

    atte:cherly camina juarez hernandez

  3. profe: buen dia ..
    antes que nada desearle exito en sus respetivas labores, mi comentario al programa PROLOG ES: un lenguaje de programacion simple pero poderoso desarrollo para la logica. que ayuda al proceso cognitivo para desarrallar nuestras habilidades.

    me parecio un exelente programa lastima que es muy poco timpo para sguir manipulando la verdad es un xelente maestro en lo personal me gustaria que nos siguiera impartiendo clases.
    le agradesco su comprension y muchas gracias por comprendernos que este muy bien y mucho exito

  4. rafita07 dijo:

    esta programacion es muy buena ya que es muy facil de usar y sin muchos comandos dificiles y es muy practico.

  5. rafita07 dijo:

    prolog es un programa muy facil

  6. rafita07 dijo:

    ATENTAMENTE

    RAFAEL COUTIÑO RAMIREZ

  7. kalatawn dijo:

    que tal mi experiencia en prolog en es nueva y la mera verdad que con lo que enseño el profe ayudo mucho para que esta experiencia fuera facil saludos

  8. eje k onda profe
    prolog esta buen programa y spero k nos de clases nuevamente

  9. jcastillo85 dijo:

    Prolog es programa muy poco familiar y un complejo en la forma de utilizar .. existen muchas versiones de este lenguaje.. pero la mas usual y mas facil d utilizar es la que vimos en este apartado y en clases..

    la forma en que lo vimos nos quedo un poco mas claro por como lo explico el profesor en clases..

    atte. josmar..

  10. fer93 dijo:

    esta my bueno profe

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s