Sea*_*her 17 modularity scalability module prolog 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 ) .
%-------------------------------------------------------------------------------%
Run Code Online (Sandbox Code Playgroud)
在源文件的顶部?如果它是特定于程序的,我正在使用gprolog
.在此先感谢您的帮助.
fal*_*lse 12
GNU-Prolog没有真正的模块系统,因此您的方法是目前最好的方法.也许GNU-Prolog可能会在未来添加一个模块系统,但我不打算在它上面做生意.
最频繁的模块系统允许在不同的模块中定义具有相同谓词名称和arity的谓词.从而避免了谓词的名称冲突.原子和仿函数在模块边界上保持不变.SICStus,YAP,SWI,Ciao,IF和ISO标准等系统都有这样的系统.
另一种模块系统由XSB提供 - 称为基于仿函数.
获取当前的Logtalk开发版本,该版本为GNU Prolog 1.4.0的稳定版本提供全面支持.您可以通过Subversion checkout或Git克隆来获取它(有关详细信息,请参阅http://logtalk.org/download.html).或者只是私下给我发邮件,我会为你建立一个安装程序.Logtalk是从头开始设计的,用于大型编程.您可以使用它来编写可移植的应用程序(Logtalk在九个不同的Prolog编译器上按原样运行).您甚至可以使用它在Prolog编译器中运行Prolog模块代码,例如不包含模块系统的GNU Prolog.Logtalk附带了一百多个示例,可移植库,可移植开发人员工具和完整文档.从Prolog到Logtalk非常简单.编写便携式代码每天都在移动;-)
说的假的都是对的。
然而,您可能会考虑 Logtalk,它在多个 Prolog(包括 GNU-Prolog)之上实现了一个模块系统以及一个 OO 系统。
http://logtalk.org/faq.html#general-3