[caracas-pm-list] Re: [l-linux] prolog interface c , perl

Ernesto Hernandez-Novich emhn at telcel.net.ve
Sun May 9 17:45:10 CDT 2004


Este mensaje vá mejor en l-desarrollo.

On Sat, 8 May 2004, Rodolfo Quiñones wrote:
> Estoy desarrollando un sistema en perl al cual le quiero agregar un
> modulo (sistema experto), para decidir sobre varias soluciones posibles.
> Dicho sistema experto pienso desarrollarlo sobre "gprolog".

gprolog es un compilador, pero la única forma de tener acceso a la
máquina de unificación es a través de su propio front end; no existe una
librería separada con la cual enlazarte.

Es muy bueno y suficientemente rápido si tu proyecto es 100% prolog y si
no piensas interactuar con el desde fuera.

> Conoce alguno la forma de ejecutar predicados desde el programa en perl
> o quiza c?

Hay varias formas de hacer eso: existe un módulo Perl que implementa el
algoritmo de unificación y la máquina de deducción en Perl puro, y
existen dos módulos para conectarse a SWI-Prolog. Pienso que ésta última
puede ser una mejor alternativa para tí, porque la comunicación es
_bidireccional_: como SWI-Prolog provee una librería C con el API para
interactuar con la máquina de deucción, el programa Perl puede acceder
directamente a ella sin pasar por un "front end", y obtener respuestas
directas.

Finalmente, existe un módulo de "azúcar sintáctica" para que puedas
escribir las cláusulas _directo_ en el código Perl.

> Algo asi como generar un ejecutable con el programa en prolog, luego
> poder llamar ese ejecutable pasandole como parametros algun objetivo y
> que me devuelva el(los) resultado(s). La salida pudiera ser un fichero.

Puedes lograr eso usando qx//, `` o system(), y no solamente con gprolog
sino con cualquier programa externo; funciona, pero es _lento_ y si
además piensas hacer consultas repetidas contra la misma base de
conocimientos con frecuencia, pues obviamente es muy mala idea, porque
cada vez que quieras hacer una consulta tienes que inicar un proceso,
cargar las reglas, ejecutar la consulta, recibir la respuesta, muere el
proceso, y así cada vez.

Es mejor la interfaz directa con SWI-Prolog porque así la máquina de
deducción está permanentemente en memoria mientras dura la ejecución de
tu programa Perl.

> Cualquier sugerencia, recomendacion o documentacion al respecto es bienvenida.

Usar Perl con SWI-Prolog via Language::Prolog::* va a ser mucho más
rápido y eficiente, sobre todo si el tiempo de ejecución es largo.

Búsca el módulo en CPAN.
-- 
Ernesto Hernández-Novich - On Linux 2.6.5 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't apt-get it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3
------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list