17

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

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

4

3 回答 3

11

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

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

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

于 2011-07-14T15:42:42.120 回答
8

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

于 2011-07-15T00:30:51.417 回答
4

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

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

http://logtalk.org/

于 2011-07-14T17:22:51.657 回答