在prolog中进行大规模编程

时间:2011-07-14 15:29:27

标签: module prolog scalability modularity gnu-prolog

我正在努力保持我的Prolog代码模块化,我想知道是否有人对如何做到这一点有任何建议。我使用简单的consult进行此操作的方式,但随着我的文件数量的增加而增加并且屈服于命名冲突,这会变得很麻烦。是否存在类似于“典型”导入的构造,例如

%-------------------------------------------------------------------- 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。提前感谢您的帮助。

3 个答案:

答案 0 :(得分:12)

GNU-Prolog没有真正的模块系统,因此您的方法是目前最好的方法。也许GNU-Prolog将来可能会添加一个模块系统,但我不打算在它上面做生意。

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

另一种模块系统由XSB提供 - 称为基于仿函数。

答案 1 :(得分:7)

获取当前的Logtalk开发版本,该版本为GNU Prolog 1.4.0的稳定版本提供全面支持。您可以通过Subversion结帐或Git克隆来获取它(有关详细信息,请参阅http://logtalk.org/download.html)。或者只是私下给我发邮件,我会为你建立一个安装程序。 Logtalk是从头开始设计的,用于大型编程。您可以使用它来编写可移植的应用程序(Logtalk在九个不同的Prolog编译器上按原样运行)。您甚至可以使用它在Prolog编译器中运行Prolog模块代码,例如不包含模块系统的GNU Prolog。 Logtalk附带了一百多个示例,可移植库,可移植开发人员工具和完整文档。从Prolog到Logtalk非常简单。编写便携式代码每天都要进行移植; - )

答案 2 :(得分:4)

什么错误说得对。
但是,您可能会考虑在几个Prolog(包括GNU-Prolog)之上实现模块系统和OO系统的Logtalk。

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

http://logtalk.org/