2

我正在编写一个 Prolog 解释器作为练习,并想知道我的目标是什么。不幸的是,有许多版本的 Prolog 可供选择,并且在不同程度上记录了它们。我很快从一个显然对互联网期望过高的人那里找到了这个问题,他想要一份详细的 Prolog html 规范。答案是您可以花 30 美元获得 ISO 标准,但这是相当不切实际的。用户永远不会为了阅读Prolog 而花 30 美元,因为他们可以用更少的钱获得 Prolog 解释器,所以如果你付钱并遵守标准,很少有人会认可你的努力。因此,ISO 标准没有得到普遍尊重一点也不让我感到惊讶。

从 ISO 标准是一个笑话的假设出发,解释器应该瞄准的 Prolog的真实版本是什么?我并不是说每个小的 Prolog 解释器都应该完全实现每个功能,但是在构建 Prolog 解释器时,必须做出的小决定是没有止境的。有人应该如何发现 Prolog 社区关于 Prolog 应该是什么的共识?

4

3 回答 3

3

如果您正在编写 Prolog 系统作为练习,请不要期望您完成了太多工作。毕竟,这是一个相当大的努力。

首先,瞄准ISO 标准的核心,即 13211-1:1995,包括 Cor.1:2007 和 Cor.2:2012。许多系统都支持该核心,例如:IF、SWI、YAP、B、GNU、SICStus、Jekejeke、Minerva。因此,虽然这个核心只涵盖了最基本的内容,但对你来说仍然需要做很多工作。

然后,您可以考虑您想要进一步的方向。从标准的角度来看,这些是特定于实现的扩展。系统在提供扩展的方式上大相径庭,因此没有明确的选择方式。最流行的系统是SICStus(商业)和SWI(开源)。比 SWI 具有更好一致性的开源系统是GNU

你在你的问题中提出了很多相当有争议的含义,所以让我试着整理一下:

标准的价格。ISO 标准确实需要一些成本 - 这些文件具有一定的法律地位 - 取决于您所在的国家和法律。免费提供的网络文档只能作为证据。例如,请参阅以相同价格获得的C 标准:一个官方高价(285 美元)和一个由 INCITS 降低的价格(30 美元)。不同之处仅在于封面。至少,您可以以显着降低的价格获得 Prolog 标准。

关联。只有一个标准。系统非常符合。在它们不同的地方,它们的差异相当随机。作为一个例子,看看这个涵盖阅读和写作术语的详细语法比较。通常,此类差异由受到一种或另一种差异打击的用户报告。这些差异在任何地方都没有正式定义。

于 2013-10-28T02:52:45.393 回答
1

我不同意您对 ISO Prolog 的假设,实际上我建议尝试实施 ISO Prolog 的一部分(即“确保”正确实施 findall/setof)。

ISO标准的一个主要问题是模块指令。然后选择一个实现来建模模块,或者完全跳过它们。

甚至一些“未讨论”的内置函数也难以实现,具体取决于您使用的语言(C、Haskell、Lisp、SQL、Javascript、C++...)以及您对翻译程度所做的选择。大多数实现不是解释器,而是具有不同程度的运行时支持的字节码编译器。字节码级别最常用的选择是 Warren 的抽象机(WAM,您肯定知道)。

许多年前,当我编写我的 Prolog 解释器时,我设计并实现了一个面向对象的数据库模型,使用算法 ABC 而不是 WAM,并且我巧妙地设计和实现了变量处理......但我遗漏了 setof/bagof,例如...

于 2013-10-28T08:11:19.607 回答
0

我认为SWI-Prolog现在在很大程度上推动了 Prolog 标准,因此请查看他们的文档……除此之外,在过去几年的 Prolog 标准化会议中,您所问的问题正在被一遍又一遍地辩论。一些人认为应该将表格纳入标准,其他人则声称自动索引也是如此,等等。所以,在我看来,你能做的最好的事情就是“模仿” SWI 对大多数东西所做的事情,而且你几乎肯定会符合标准

于 2013-10-28T00:41:18.113 回答