在prolog中进行大规模编程

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提供 - 称为基于仿函数.


Pau*_*ura 7

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


z5h*_*z5h 5

说的假的都是对的。
然而,您可能会考虑 Logtalk,它在多个 Prolog(包括 GNU-Prolog)之上实现了一个模块系统以及一个 OO 系统。

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

http://logtalk.org/

  • 是的,Logtalk 是不同的。但是,尽管存在差异,Logtalk 包含了 Prolog 模块的大部分功能,并且能够将 Prolog 模块编译为对象。例如,目前的SWI-Prolog基本库大部分只需将文件扩展名由.pl改为.lgt即可作为对象编译使用。 (4认同)
  • 所提到的基于谓词的模块系统无论是开源的还是商业的都非常相似。从一种到另一种的移植相对简单。也就是说,您有多个可能的提供者。Logtalk 系统完全不同,并且只有一个来源。 (2认同)