Prolog与Erlang(以及其他函数式编程语言)的比较

13

Prolog有什么问题吗?

Prolog在列表和模式匹配方面表现相当不错,并提供了回溯作为额外的奖励。然而几十年来,它仍然是一种与众不同的语言,而函数式语言却蓬勃发展、层出不穷。

以Erlang为例。它的语法借鉴了Prolog,最初是用Prolog实现的,这真的很有趣。也就是说,从Erlang人的角度来看,Prolog存在根本性的问题,否则他们会根据自己的需要改进Prolog。


2
有没有比Prolog更大的Erlang系统在运行? - false
2个回答

25

在我看来,Prolog现在开始变得有趣了,但这个问题还没有定论。

是的,Prolog比Erlang有着更为悠久的传统,也是从实现角度来看更加复杂的语言!教授它也更加困难,例如,即使在其他所有语言中对于初学者来说已经无法解决的任务,都会被传统地给予Prolog初学者作为前几个示例。

正确且高效地处理回溯、垃圾回收、别名、属性变量、约束、异常处理以及许多其他Prolog功能之间微妙的相互依赖关系是很难做到的,即使一些最有才华和受过良好教育的程序员参与其中,数十年内也难以完成。目前可用的许多Prolog系统仅仅达到了现在可以在生产环境中认真使用的程度。

相比之下,制作一个简化版的Prolog让其高效且正确是相对容易的,但对于真正的Prolog却不是那么容易。

拿任何一个重要的程序进行比较,看看它的实现需要多长时间。大多数有趣的程序甚至在首次发布后几十年后仍在积极开发中。Prolog也是如此,一个完整的Prolog系统比许多其他语言实现提供了更多。

而我们确实需要真正的Prolog!所以,是的,Prolog存在问题:它难以正确地实现。但在很多功能上却非常出色,由于其中众多功能的优点:一旦完全实现,Prolog就是一个令人惊叹且无与伦比的开发环境,适用于各种任务,从定理证明到Web托管、解决组合优化问题、测试用例生成等许多现有应用程序。

例如,Erlang-style进程现在正在为Prolog开发。请参见Torbjörn Lager的Pengines

为什么只有现在(即最近的两年左右)才能在Prolog中使用这个功能?原因很简单:许多Prolog系统(在这种情况下指SWI-Prolog)直到最近都无法稳定地运行24x7的Web服务器。 那是为什么呢?再次强调,由于其许多高级特性之间微妙的相互依赖关系,要正确实现这一点对于Prolog来说非常困难。慢慢地,我们终于到达了这里。
Prolog大获全胜!

就我所知,刚刚与Torbjorn交换了电子邮件,他说进程已经死了。但是pengines肯定不是。 - Anniepoo
我认为你说得对,(开放)系统现在已经达到了足够成熟的水平,使它们变得有趣并适合实际工作。我认为它花费这么长时间的主要原因不是因为它很难,而是因为开发资源分散在太多的实现上。现在,我们有许多好的实现。尽管如此,每个实现都有非常不同的重点。理想情况下,我们应该坐在一起组装一个新系统,将YAP的速度与XSB的表格、ECLiPSe的约束以及SWI-Prolog的环境和接口相结合。 - Jan Wielemaker
2
符合性也会有所帮助。 - false

2
一种语言必须比其他语言更好地解决现实生活中的问题,才能成为主流。谈到Erlang,如果没有它具有处理数百万个并发任务的抢占式多任务软实时编程能力以及在虚拟机中运行的能力,它将不过是另一种函数式语言而已。这加上它能够运行在虚拟机中,使其成为一个真正强大的组合。从这个意义上说,这些增加使得Erlang独特。事实上,它是唯一被广泛使用的面向Actor的编程语言。
看看有多少不同的C/C++方言被创建出来了,但C/C++仍然是主流。这些新方言只是没有提供任何优势,或者优势不够明显。
我相信Prolog有它的市场,但它没有提供比其他语言更多的东西,而且维基百科上的问题简述也提出了一些值得考虑的原因。

3
这看起来像是对另一个问题的回答。 - Alexey Orlov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接