martes, 26 de enero de 2010

Creando un ejecutable con Swi-Prolog

Este post lo escribí pues algunos amigos me comentaron cómo se podría crear un ejecutable con swi prolog. Bueno, SWI-Prolog nos provee de un mecanismo sencillo para la creación de ejecutables.
La manera de hacerlo es como muestro a continuación:

Primero debemos tener un cuerpo principal, en donde estén los predicados que se ejecutaran al inicio de la llamada a nuestro programa, lo que se asemeja a la función principal de C:
int main(int argc,char *argv[])
{
//Cuerpo de la función principal
return 0;
}
O al método principal de Java:
public Class Main() {

public static void main(String[] arg) {
//Cuerpo del método principal
}

}
En nuestro caso, en SWI-Prolog se declararía del siguiente modo (Hago referencia a SWI-Prolog y no al lenguaje en general, puesto que cada Entorno de Prolog tiene su propia forma de realizar este proceso) :
main:-
%
% Cuerpo del predicado principal
%
halt.
Luego de realizado este proceso, tendrémos que invocar al predicado que se encargará de crear el ejecutable en sí.
qsave_program('c:/ejecutable.exe', [stand_alone(true), goal(main)]).
Con eso bastará para distribuir nuestro propio ejecutable, teniendo en cuenta que al llevar de una máquina a otra al *.exe, se debe hacer lo mismo con los archivos *.dll de la carpeta \bin de la instalación de nuestro SWI-Prolog. (tanto *.dll's como *.exe deben estar en una misma carpeta).

Para cerrar este post, aquí les dejo el código fuente de un Sistema Tomador de Decisiones para la detección de plagas en sembríos de Tara así como su respectivo ejecutable (ejecutable.exe). Debemos descomprimir todos los archivos en la unidad C: de tal forma que nos quede 'C:\programa' y luego seguir los pasos arriba mencionados para generar el ejecutable.

En todo caso adjunto las dll necesarias, en caso no se quiera instalar todo el SWI-Prolog. Las pueden descargar aquí.

Recuerden que dentro de la carpeta programa hay un archivo léeme!!!!.txt es cuál es muy importante que lo lean, o en todo caso lean estos tips para poder ejecutar el sistema experto y generar su respectivo ejecutable:

1. Primero debes crear una carpeta en tu unidad C:\ llamado programa.
2. Dentro de C:\programa descomprimes todos los archivos de programa.rar
3. Descarga
- Instala primero el swi prolog
- Luego dentro de setup.rar, que es el instalador del swi prolog editor, dale doble clic al archivo setup.exe
- Siguiente, siguiete y listo xD!
4. Abre el swi prolog editor y asegúrate de cerrar todos los archivos anteriormente trabajados haciendo clic en menú
Archivo y cerrar todo.
5. Abre el archivo proyectofinal.pl que está en C:\ llamado programa y luego en menú iniciar, dar clic a consultar.
6. En la parte inferior, en el editor de consultas escribe lo siguiente sin comillas: "main."
7. Listo, tenemos nuestro sistema experto ejecutándose.

10 comentarios:

Anónimo dijo...

ME va a ser de gran ayuda tu sistema experto , aún sigo tratando de entender como usar la parte gráfica de prolog, no se si tengas tiempo de poder compartir algún material adicional de este uso! Gracias

Rolando dijo...

Te recomiendo veas este post.

http://jlperalta.blogspot.com/2010/09/interfaz-en-prolog.html

German dijo...

me sale el siguiente error

ERROR: c:/programa/proyectofinal.pl:68:0: Syntax error: Operator expected

la linea 68 hace referencia a halt.qsave_program('C:\programa\ejecutable.exe', [stand_alone(true), goal(main)]). que puede ser

Gracias!!!

Anónimo dijo...

Tu me podrias proveer el ejecutable podria ser otra opcion muchas gracias!!!

Anónimo dijo...

ya me funciono tan solo era quitarle halt. muchas gracias

Anónimo dijo...

hola soy quien te hizo el primer comentario , ya va mejorando mucho mi interfaz, gracias por el link que pusiste, ahora tengo una duda, como puedo hacer que desde la inferfaz pueda llamar a un a regla! y que los resultados que encuentre en la base de conocmiento los desplegue en la interfaz :S !! intente usando

new(Request0,button(consultar,and(message(@prolog,
answer_1,Student?)))),

donde anser_1 es una regla que defini para que hace una busqueda recursiva solo que no ejecuta nada ni en terminal ni en interfaz, como puedo lograrlo :D agradeceria mucho tu ayuda por minima que sea

Anónimo dijo...

estoy trabajando en un sistema esperto para especie de animales pero al correrlo me genera un error end of clause
cuando envio: new(B,button(siguiente,and(message(@prolog,principal,Pre1?selection,Pre2?selection,Pre3?selection),message(D,destroy)))),
send(D,append,B),
send(D,default_button,siguiente),
send(D,open,point(300,300)). en esta ultima linea me genera el error

José Alejandro dijo...

Gracias me ha servido mucho esta informacion

JAVAMAN dijo...

Doc consulta podrias compartirme el : ejecutable.exe ... porque no está en el archivo adjunto y al compilar me pide la ubicación de dicho compilado. Me confirmas por favor.

Victor Gil dijo...

ayúdame, me sale este error:

[PCE: error: c:/Programa/talla.bmp: Cannot open for read: No such file or directory]
false.

Publicar un comentario