Module 用prolog进行大型程序设计

Module 用prolog进行大型程序设计,module,prolog,scalability,modularity,gnu-prolog,Module,Prolog,Scalability,Modularity,Gnu Prolog,我试图保持我的Prolog代码模块化,我想知道是否有人对如何做到这一点有任何建议。我使用simpleconsults进行此操作的方式,但随着文件数量的增加和名称冲突的出现,这种方式变得越来越麻烦。是否存在与“典型”导入类似的构造,例如 %-------------------------------------------------------------------- compiler.pl [ scanner, parser, codegen ] . %----------------

我试图保持我的Prolog代码模块化,我想知道是否有人对如何做到这一点有任何建议。我使用simple
consult
s进行此操作的方式,但随着文件数量的增加和名称冲突的出现,这种方式变得越来越麻烦。是否存在与“典型”导入类似的构造,例如

%-------------------------------------------------------------------- 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 ) .

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

在源文件的顶部?如果它是特定于程序的,我使用的是
gprolog
。提前感谢您的帮助。

GNU Prolog没有真正的模块系统,因此您的方法目前是您所能获得的最佳方法。也许GNU Prolog将来可能会添加一个模块系统,但我不会把生意押在它上面

最常见的模块系统允许在不同的模块中定义具有相同谓词名称和arity的谓词。从而避免了谓词的名称冲突。原子和函子在模边界上保持不变。SICStus、YAP、SWI、Ciao、IF和ISO标准等系统都有这样的系统


XSB提供了另一种模块系统,称为基于函子的。

false说的是对的。
但是,您可以考虑实现模块系统的Logtalk,以及几个Prolog(包括GNU PROLG)之上的OO系统。


获取当前的Logtalk开发版本,该版本为GNU Prolog 1.4.0的稳定版本提供了全面支持。您可以通过执行Subversion签出或Git克隆来获得它(有关详细信息,请参阅)。或者只是私下给我发邮件,我会为你建立一个安装程序。Logtalk是为大型计算机编程而从头设计的。您可以使用它来编写可移植的应用程序(Logtalk在九个不同的Prolog编译器上运行)。您甚至可以使用它在不包含模块系统的Prolog编译器(如GNU Prolog)中运行Prolog模块代码。Logtalk附带了100多个示例、可移植库、可移植开发工具和完整的文档。从Prolog到Logtalk相当容易。编写可移植代码胜过每天移植;-)

上述基于谓词的模块系统无论是开源的还是商用的都非常相似。从一个到另一个的移植相对简单。也就是说,您有几个可能的提供者。Logtalk系统完全不同,只有一个来源。是的,Logtalk是不同的。但是,尽管存在这些差异,Logtalk将Prolog模块包含在其大部分功能中,并且能够将Prolog模块编译为对象。例如,当前大多数SWI Prolog basic库都可以编译并用作对象,只需将文件扩展名从.pl更改为.lgt即可。