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.
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
ResponderBorrarTe recomiendo veas este post.
ResponderBorrarhttp://jlperalta.blogspot.com/2010/09/interfaz-en-prolog.html
me sale el siguiente error
ResponderBorrarERROR: 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!!!
Tu me podrias proveer el ejecutable podria ser otra opcion muchas gracias!!!
ResponderBorrarya me funciono tan solo era quitarle halt. muchas gracias
ResponderBorrarhola 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
ResponderBorrarnew(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
estoy trabajando en un sistema esperto para especie de animales pero al correrlo me genera un error end of clause
ResponderBorrarcuando 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
Gracias me ha servido mucho esta informacion
ResponderBorrarDoc 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.
ResponderBorrarayúdame, me sale este error:
ResponderBorrar[PCE: error: c:/Programa/talla.bmp: Cannot open for read: No such file or directory]
false.