jueves, 21 de octubre de 2010

LENGUAJES LÓGICOS - Generalidades PROLOG

Lenguajes de Programación - Semana 9 - PUNTOS EXTRA

Es un lenguaje declarativo e interpretado, es decir, se usa para representar conocimientos sobre determinado universo y las relaciones entre los objetos de ese universo. A partir de esos conocimientos el sistema comienza a deducir todos las cuestiones que se pueden plantear, las cuales pueden ser verdaderas o falsas.

En la sintaxis de Prolog se utilizan cláusulas y comandos.

Las cláusulas son definidas por nosotros y se subdividen en hechos y reglas, terminan cada una en punto siempre, por ejemplo:

HECHO: nombre_pred(X, Y, Z, ...).
Donde X, Y, Z son los argumentos del hecho y pueden ser dos, tres, etc...

REGLA: nombre_pred(X, Y, Z, ...) :- pred1(...) , pred2(...).
Esto se puede leer: nombre_pred es verdad si pred1 y pred2 son verdad

Podemos utilizar la siguiente tabla:




:- CondiciónSi... entonces...
, Conjunción... y ...
; Disyunción... o ...


En cambio los comandos son los objetivos que se plantean al sistema, por ejemplo:

Supongamos que tengo el hecho:

raton(jerry). (jerry es un raton)

quiero saber los siguientes comandos asi que le pregunto al sistema:

a) ?- raton(mickey). (Es mickey un raton?), el sistema respondera FALSE porque no lo he declarado asi.

b) ?- raton(X). (qué cosa es un raton?), el sistema respondera X = jerry, osea, jerry es un raton.

A los comandos tambien se les conoce tambien como GOAL (metas).

Las variables son secuencias de caractéres alfanumericos que comienzan siempre en mayúscula o con guión bajo, por ejemplo:

Variable1
_Variable2

Vamos a ver un ejemplo sencillo de ejecución de prolog. Para ello tenemos primero que instalar el interprete de Prolog en nuestro sistema, teclearemos en una terminal los siguientes comandos: sudo apt-get install swi-prolog y sudo apt-get install gprolog.

Una vez instalados los paquetes vamos a iniciar alguno de los interpretes, en mi caso abriré GPROLOG, asi que tecleamos en la terminal gprolog, se vera algo como esto:


Ahora declaremos algunos hechos para comprobar si son verdaderos; abrimos un documento de emacs (emacs -nw ejemplo1.pro) y tecleamos lo siguiente:

vehiculo(X,Y,Z):-auto(X,Y,Z);camioneta(X,Y,Z).
auto(dodge,45000,rojo).
auto(nissan,20000,blanco).
camioneta(ford,60000,negro).
camioneta(chevrolet,50000,azul).

Donde: X es la marca del auto, Y es el precio y Z es el color.

Ahora ustedes diran, qué quiere decir esto, bueno mas o menos se traduce asi:

un vehiculo es verdad si auto es verdad o camioneta es verdad
dodge es un auto que cuesta 45000 y es color rojo
nissan es un auto que cuesta 20000 y es color blanco
ford es una camioneta que cuesta 60000 y es color negro
chevrolet es una camioneta que cuesta 50000 y es colo azul

La primera linea tambien quiere decir que cualquier auto y cualquier camioneta se consideran vehiculos.

GUARDAMOS EL DOCUMENTO CON TERMINACION *.PRO Ó *.PROLOG

Ahora, regresamos al interprete gprolog y compilamos el archivo, ello usamos la siguente sintaxis: consult('/home/usuario/ubicacion/ejemplo1.pro')., cada uno sabe donde guardo el archivo, presionamos enter y en mi caso se ve algo asi:


Ahora, hagamosle algunas preguntas al sistema para ver que nos responde:

vehiculo(_,_,_). (existen vehiculos?), en este caso se escriben guiones bajos porque no nos interesan sus caracteristicas, solo si existen en el dominio:


el sistema nos responde yes , es decir, si hay vehiculos.

vehiculo(X,_,_) (marcas de los vehiculos?) recordemos: X es la marca del auto, Y es el precio y Z es el color; en Y y Z escribimos guiones bajos porque solo nos interesa la marca:


el sistema nos muestra la primera marca, despues hay que presionar la tecla de punto y coma para listar las demas marcas, el sistema cierra la pregunta con un yes.

vehiculo(ford,Y,_). (precio del vehiculo ford?) En este caso especificamos la marca y escribirmos la Y para el precio, un guion bajo porque no nos interesa su color.


El sistema nos da la respuesta y cierra con un yes.

vehiculo(X,_,azul) (dime la marca del vehiculo azul, si este existe?) X para la marca, guion bajo porque no nos interesa el precio y especificamos el color:


Para terminar: vehiculo(X,Y,Z). (dame las caracteristicas de todos los vehiculos). Cubrimos todos los argumentos con variables para saber sus caracteristicas:


Una vez mas, nos mostrara el primer resultado, presionamos la tecla punto y coma para listar los demas.

Bueno, espero y les haya servido este mini-mini tutorial, y que haya sido lo mas explicito posible.

SALUDOS!!! ^_^


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

1 comentario: