【问题标题】:Programming in the large with prolog使用 prolog 进行大型编程
【发布时间】:2011-10-05 11:08:47
【问题描述】:

我正在尝试保持我的 Prolog 代码模块化,我想知道是否有人对如何做到这一点有任何建议。我使用简单的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。提前感谢您的帮助。

【问题讨论】:

    标签: module prolog scalability modularity gnu-prolog


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      http://logtalk.org/

      【讨论】:

      • 上述基于谓词的模块系统都非常相似,无论是开源的还是商业的。从一个移植到另一个相对简单。也就是说,您有几个可能的提供者。 Logtalk 系统完全不同,只有一个来源。
      • 是的,Logtalk 不同。但是,尽管存在差异,Logtalk 将 Prolog 模块包含在其大部分功能中,并且能够将 Prolog 模块编译为对象。例如,当前大部分 SWI-Prolog 基本库只需将文件扩展名从 .pl 更改为 .lgt 即可编译并用作对象。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2018-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 2023-04-08
        • 2015-05-23
        相关资源
        最近更新 更多