Entorno de desarrollo SWI-Prolog

Uso SWI-Prolog, una de las implementaciones más potentes y populares del lenguaje. Para Windows, está disponible un entorno de desarrollo compuesto básicamente por:

  • Un panel dónde escribir código con resaltado de sintáxis.
  • Botones para hacer cosas como consultar el archivo que estamos editando (esto es compilarlo y cargarlo en memoria para poder hacer consultas sobre él).
  • Un panel dónde realizar consultas.

En los sistemas operativos basados en Linux (como Ubuntu) no existe un entorno similar. Los programadores full-time Prolog deben tener su forma de solucionarlo. Yo encontré la mía. Puede no ser la mejor, pero es más cómoda que tipear por un lado, tener el intérprete abierto por otro e ir consultando luego de cada modificación.

De hecho, la misma implementación trae algunas primitivas útiles que se pueden usar desde el lenguaje. Por ejemplo:

?- consult('cats.pdb').
% cats.pdb compiled 0.01 sec, 1,664 bytes
true.

compilará el archivo cats.pdb y los hechos y reglas definidos en él estarán disponibles para nuestras consultas. Si modificamos el archivo fuente, luego debemos hacer:

?- reconsult('cats.pdb').
% cats.pdb compiled 0.00 sec, 0 bytes
true.

para que las modificaciones tengan efecto. Encontré otro predicamo muy útil:

?- edit('cats.pdb').
% Waiting for editor ...
% Running make to reload modified files
% /home/juanjo/prolog/cats.pdb compiled 0.00 sec, 124 bytes
% Scanning references for 1 possibly undefined predicates
true.

Abrirá el editor por defecto configurado en la computadora, nos permitirá editar el archivo y cuando lo guardemos retorna true al intérprete. Ahora lo que antes hacíamos a mano, podemos hacerlo desde el intérprete. Un avance, pero se pone mejor: podemos usar estos predicados Prolog para escribir una regla que haga todo por nosotros. Yo uso:

myedit(File) :-
edit(File), reconsult(File).
myedit(File) :-
edit(file(File)), reconsult(File).

¿Cómo funciona? Primero notemos que son dos reglas. La primera recibe un nombre de archivo e intenta editarlo, si el archivo existe se abre el editor, editamos, cuando lo guardamos edit(File) evalúa true y se pasa al siguiente hecho que reconsulta el archivo y listo.

Si el archivo no existe, la primer regla no termina y se pasa a la segunda. file(File) se encarga de crearlo y edit podrá editarlo, trabajamos y todo termina como en el caso anterior.

Podemos escribir este código en el archivo .plrc de nuestra home para que sea cargado al iniciar el intérprete. Finalmente si utilizamos la extensión .pdb, vim se encarga de cargar el resaltado correspondiente a la sintácis de Prolog.

Acerca de Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar.
Esta entrada fue publicada en Aprendiendo Prolog y etiquetada , . Guarda el enlace permanente.
  • rainergua
    Ayuda por fis. tengo q poder imprimir ela slaida de la ejecucion de un predicado en un archivo, bueno el scaso es este.
    involucrado(niño).
    actividad(real).
    delito(X,Y):-involucrado(X),actividad(Y).
    %luego realizo la ocnsulta
    delito(niño,real).
    true.
    entonces true deberia de poder imprimirlo en un archivo por favor necesito su ayuda
  • Yo utilizo la misma técnica que Nacho, pero con Geany.

    Por cierto para hacer un consult puedes utilizar simplemente los corchetes. Por ejemplo
    ?- ['cat.pdb']
  • Hola Juanjo!
    Te cuento que en las clases de Paradigmas de Programación, obviamente mientras desarrollo la clase, utilizo Linux. Lo que hacía para Prolog era abrir GEdit, con una terminal empotrada debajo. En esa terminal corría swipl.
    Luego con cada modificación del archivo de "arriba" tenía que hacer un consult(archivo). y listo.
    Es una buena solución.

    Otra alternativa, pero hay que acostumbrarse a utilizarlo, es trabajar con el framework de XPCE. Tienen un editor implementado [1]. Se ejecuta con
    ?- emacs.

    Hay un trace gráfico incluso.

    un saludo!

    [1] Podés encontrar más info aquí http://www.swi-prolog.org/PceEmacs.html
blog comments powered by Disqus