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ón | Si... 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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYNPp0d2m04sAxFA3fn-1tDAiIR8HnzRjneyz3FkE_GgLcSoDrfQ1SR3xjhw2G2vagB5EyP9JIeREfbI6PxG1Cm-54PjuOjgxU8mPgh2hTU3OYHDiy32Vz18q6l_8xEtk6I4ZI06c31zz8/s320/1.png)
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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpxcC6MezWJ5pRMZX3_er5hCoZO_u0bXei802QLkUOmr-YAcyoHixssa_uClPI-hL3oaue61GuN_lUzOCd3ZzSDPpmdYCF7aehLUwAiW-NiDv4nCggFJvYZaktJJLddUM-f9J_6bxgozAC/s320/2.png)
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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLkdrdBs2dpVDSz4fqoNIolZM_7KZZMMTsDqcZYSy6LFGvrUunbJAwaZ9y5GYmUD6nJHnQ6GsO3Q8mqC4Yn5vyZljt97-qDRkYT89oMcag-X-hQ3-9i1hykVOv6FBUog5s8a3q6sXffLkp/s320/3.png)
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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRxq8YfJSle4dOKPhQUnqQiYxhaZO9fLwuVXO819ld9R-Urq28DnSokiCO1Qv1yCv_jrfNMjpdXpk39oXF4sOWM1_ZmJYmKLCpOuUYOuHBnE-lYDUbKug3CqbUhOBMIR0a_j9imZZYl_3H/s320/4.png)
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.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjpH3hf59c15g-mmcgpbhskUJY2-W51aKZ3oESXjK1RP0EtrbQFDL-tbFC6gSJIDXzk9PS8IT6yDIUYidYdgON62PG4-_9KptKH4MuYC8ROAsDe4JTfLgbMwK4YhLhAlftPNYgudBjfcSs/s320/5.png)
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:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzAuMI_s2hOe5VubvMNqWWGB4rPO9s2AhNB06ttVa4JJAwR98LuXuwKCD1fz5yi3Yszdowu7G-qRz6hKeWfwZY_99VZ-hGJzvXAk7FeRQ1IvgCDovAvv_cs3CRsE_qes0RQE_rZQCU5a79/s320/6.png)
Para terminar: vehiculo(X,Y,Z). (dame las caracteristicas de todos los vehiculos). Cubrimos todos los argumentos con variables para saber sus caracteristicas:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6TvGVVvN-PqP3zElN_GXPur0EYJIR95bU_mu1jcfDFr-V3ZZxV47knHNkAYYkXfiY_oqLSolENQjJNsbmUh8yYJTQxsqmtTUtgZ7lx2ju75nrRSCmgqlkjmM3fLTp10jMnflnVEwkUHL/s320/7.png)
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
Muy bien. Te pongo tres puntos extra en la clase.
ResponderEliminar