在大型编程中使用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。谢谢你的帮助。

GNU-Prolog没有真正的模块系统,所以你的方法是目前你能得到的最好的方法。也许GNU-Prolog将来会添加一个模块系统,但我不会把赌注押在它上面。

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

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

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

假的说的是对的。
但是,您可以考虑在几个prolog(包括GNU-Prolog)之上实现模块系统和OO系统的Logtalk。

http://logtalk.org/faq.html一般3http://logtalk.org/

相关内容

  • 没有找到相关文章

最新更新