8

通常,正在使用的每种语言都因其优势而被使用。

Prolog的优点是什么?

可以比任何其他语言更有效地使用 Prolog 的一般情况/问题类别是什么?

4

7 回答 7

5

究竟比什么呢?Prolog 实际上只是逻辑编程的卓越实现,所以如果您的问题真的是关于编程范式的比较,那确实非常广泛,您应该看这里

如果您的问题更具体地是关于 prolog 与更常见的 OO 语言,我会争辩说您确实是在比较苹果和橘子 - “优势”(例如)只是思考世界的一种不同方式,并且有时改变提问的方式可以更好地解决问题。

于 2009-10-03T10:12:52.397 回答
5

基本上,如果您的程序可以很容易地表述为声明性形式逻辑语句,Prolog(或该家族中的另一种语言)将提供最快的开发时间。如果你使用一个好的 Prolog 编译器,它也会提供最好的性能和可靠性,因为引擎将有大量的设计和开发工作。

试图用另一种语言实现这种东西往往是一团糟。最干净和最通用的解决方案可能涉及实现您自己的统一引擎。即使是简单的实现也不是微不足道的,Warren Abstract Machine 已经写了一两本书,而且做得更好至少需要进行相当多的研究,阅读一些令人头疼的论文。

当然,在现实世界中,程序的关键部分可能会从 Prolog 中受益,但是使用另一种语言可以更好地处理许多其他内容。这就是为什么许多 Prolog 编译器可以与例如 C 接口的原因。

于 2009-10-03T10:15:51.627 回答
3

使用 Prolog 的最佳时机之一是当您遇到适合使用回溯解决的问题时。那就是当您对问题有很多可能的解决方案时,也许您希望根据某些上下文命令它们包含/排除。这暗示了很多歧义......就像在自然语言处理中一样。

将所有可能的答案写成 Prolog 子句肯定会更整洁。使用命令式语言,我认为您真正可以做的就是编写一个巨大的(真正巨大的)CASE 语句,这不太有趣。

于 2009-10-05T12:45:46.480 回答
3

Prolog 中固有的东西:

  • 模式匹配!
  • 任何涉及深度优先搜索的东西。(在 Java 中,如果你想做一个 DFS,你可能想通过访问者模式来实现它或者做一个(非常大的)CASE
  • 统一
  • ??

Paul Graham 是一个 Lisp 人,但他认为 Prolog 对 2% 的问题确实有好处,我自己喜欢将这 2% 分解并弄清楚他是如何得出这样的数字的。

他对“更好”语言的论点是“更少的代码,更多的力量”。Prolog 绝对是“更少的代码”,如果你选择它的后一种风格(类型化的),你也会获得更多的力量。使用 Prolog 时唯一困扰我的是我在列表中没有随机访问权限(没有数组)。

于 2011-01-26T22:01:10.257 回答
2

Prolog 是一种非常高级的编程语言。可以将 (Prolog : C) 类比为 (C : Assembler)

那为什么不用那么多呢?我认为这与我们使用的机器有关。它们基于图灵机。C 可以自动编译成字节码,但 Prolog 被编译为在抽象沃伦机器的仿真上运行,因此效率不高。

此外,prolog 基于一阶逻辑,无法以声明性方式解决每个可解决的问题,因此,在某些时候,您需要依赖类似命令式的代码。

于 2012-10-25T19:09:17.750 回答
1

我会说 prolog 对于知识库构成解决方案重要组成部分的问题非常有效。特别是当知识结构适合被编码为逻辑规则时。

例如,为特定问题领域编写自然语言解释器将需要该领域的大量知识。专家系统也属于这种知识驱动的范畴。

它也是探索逻辑谜题解决方案的好语言;-)

于 2009-10-03T10:38:04.420 回答
1

一年多以来,我一直在使用 Swi-Prolog 进行编程(为了好玩)。我认为 Prolog 的优点之一是 Prolog 没有副作用:Prolog 是一种对(本地或类成员)变量没有用的语言,它迫使程序员不使用变量。Prolog 对象没有状态。我认为。我一直在编写命令行 Prolog(没有 GUI,除了少数 XPCE 测试):它就像轨道上的火车。

于 2012-12-12T20:53:40.610 回答