2011-07-14 9 views
14

Estoy tratando de mantener mi código Prolog modular, y me preguntaba si alguien tenía algún consejo sobre cómo hacer esto. La forma en que estaba haciendo esto con simple consult s, pero que se está volviendo engorroso a medida que el número de mis archivos aumenta y sucumbe a los conflictos de nombres. ¿Hay alguna construcción similar a la de una importación "típica", comoProgramación en grande con prólogo

%-------------------------------------------------------------------- compiler.pl 

[ scanner, parser, codegen ] . 

%-------------------------------------------------------------------- compile 

% compile(S, I) :- Compiling the source string S gives the list of instructions 
%     I 

compile(S, I) :- scan(S, T), parse(T, A), codegen(A, I) . 

%-------------------------------------------------------------------------------% 

en la parte superior de un archivo fuente? Si es específico del programa, estoy usando gprolog. Gracias de antemano por cualquier ayuda.

Respuesta

6

Obtener la versión de desarrollo Logtalk actual, que es totalmente compatible con la versión estable de GNU Prolog 1.4.0. Puede obtenerlo haciendo un pago de Subversion o un clon de Git (vea http://logtalk.org/download.html para más detalles). O simplemente envíeme un correo privado y construiré un instalador para usted. Logtalk fue diseñado desde cero para la programación en el grande. Puede usarlo para escribir aplicaciones portátiles (Logtalk se ejecuta tal cual en nueve compiladores de Prolog diferentes). Incluso puede usarlo para ejecutar el código del módulo Prolog en compiladores de Prolog como GNU Prolog que no incluyen un sistema de módulos. Logtalk viene con cerca de cien ejemplos, con bibliotecas portátiles y documentación completa. Pasar de Prolog a Logtalk es bastante fácil. La escritura de códigos portátiles supera la transferencia todos los días ;-)

10

GNU-Prolog no tiene un sistema de módulo genuino, por lo que su enfoque es actualmente el mejor que puede obtener. Tal vez GNU-Prolog podría agregar un sistema de módulos en el futuro, pero yo no apostaría ningún negocio en eso.

El sistema de módulos más frecuente permite definir en diferentes módulos predicados con el mismo nombre de predicado y arity. De este modo, se evitan los conflictos de nombre de los predicados. Los átomos y los funtores siguen siendo los mismos sobre los límites del módulo. Sistemas como SICStus, YAP, SWI, Ciao, IF y el estándar ISO tienen dicho sistema.

XSB ofrece otro tipo de sistema de módulos, denominado functor.

4

Lo que se dice falso es correcto.
Sin embargo, puede considerar Logtalk, que implementa un sistema de módulo, así como un sistema OO además de varios Prologs (incluido GNU-Prolog).

http://logtalk.org/faq.html#general-3

http://logtalk.org/

+1

Los sistemas de módulos basados ​​en predicados mencionados son todos muy similares, ya sean de código abierto o comercial. La transferencia de uno a otro es relativamente simple. Es decir, tienes varios proveedores posibles. El sistema Logtalk es bastante diferente y solo hay una fuente. – false

+3

Sí, Logtalk es diferente. Pero, a pesar de las diferencias, Logtalk subsume los módulos de Prolog en la mayoría de sus funcionalidades y puede compilar los módulos de Prolog como objetos. Por ejemplo, la mayor parte de la biblioteca básica de SWI-Prolog actual se puede compilar y usar como objetos solo cambiando la extensión del nombre de archivo de .pl a .lgt. –

Cuestiones relacionadas