【问题标题】:Prolog vs Erlang (and other functional languages) [closed]Prolog vs Erlang(和其他功能语言)[关闭]
【发布时间】:2016-06-10 15:47:10
【问题描述】:

Prolog 有什么问题?

Prolog 在列表和模式匹配方面非常出色,并提供回溯作为奖励。然而几十年来,它仍然是一种独立的语言,而函数式语言却蓬勃发展。

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

【问题讨论】:

标签: functional-programming prolog erlang


【解决方案1】:

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

是的,Prolog 的传统比 Erlang 要长得多。从实现的角度来看,它也是一种复杂得多的语言!它也更难教,例如,对于所有其他语言的初学者来说已经无法解决的任务传统上作为 Prolog 初学者的前几个示例而加剧了这种情况。

获取回溯、垃圾收集、别名、属性变量、约束、异常处理以及 Prolog 为您提供的许多其他功能 正确且高效,同时尊重它们通常非常微妙的相互依赖关系可以理解的是,即使一些最有才华和受过良好教育的程序员参与其中,也无法在短短几十年内完成。当前可用的许多 Prolog 系统刚刚达到您可以在生产环境中认真使用它们的地步。

使简化版本的 Prolog 高效且正确相对容易。不是真的。

为了比较,任何严肃的计划,看看它的实施花了多长时间。大多数有趣的程序在最初发布几十年后仍在认真开发中。与 Prolog 相同,成熟的 Prolog 系统肯定比许多其他语言实现提供的更多。

我们确实想要真实的东西!所以,是的,Prolog 有一些问题:很难正确实施。但是,由于上述众多特性,Prolog 还有很多非常正确的地方:一旦完全实现,Prolog 就是一个令人惊叹且无与伦比的开发环境,适用于各种任务,从用于虚拟主机的定理证明、解决组合优化问题、测试用例生成以及现在出现的许多其他应用程序。

例如,现在正在为 Prolog 开发 Erlang 风格的进程。例如,请参阅 Torbjörn Lager 的 Pengines

为什么这只是现在(即过去 2 年左右)才在 Prolog 中可用?很简单:直到最近,许多 Prolog 系统(在本例中为 SWI-Prolog)还没有达到稳健运行 24x7 网络服务器的标准。 那为什么呢?同样,因为 Prolog 的许多高级功能之间存在微妙的相互依赖性,所以很难做到这一点。慢慢地,我们终于到了那里。

胜利的序幕!

【讨论】:

  • FWIW 刚刚与 Torbjorn 交换了电子邮件,他说进程已死。但是 pengine 肯定不是
  • 我认为你是对的,因为(开放)系统现在已经成熟到让它们在实际工作中变得有趣的程度。我认为花了这么长时间的主要原因并不是很难,而是开发资源分散在太多的实现上。现在,我们有一些很好的实现。不过,每个人都有非常不同的侧重点。理想情况下,我们应该坐在一起组装一个新的系统,将 YAP 的速度与 XSB 的表格、ECLiPSe 的约束以及 SWI-Prolog 的环境和接口相结合。
  • 一致性也会有所帮助
【解决方案2】:

一种语言必须能够比其他语言更好地解决现实生活中的问题,才能成为主流。说到 Erlang,如果不是它的软实时编程能力和抢占式多任务处理能力,它可以处理数百万个并发任务,它只不过是另一种函数式语言。这加上它在 VM 中运行的能力构成了真正强大的组合。从这个意义上说,这些添加使 Erlang 独一无二。事实上,它是业界唯一广泛使用的actor-oriented 编程语言。

看看创造了多少不同的 C/C++ 方言,而 C/C++ 仍然是主流。那些新的方言根本没有比已经存在的方言有任何优势(或者还不够大)。

我确信 Prolog 有其利基,但它并没有提供太多其他语言能够提供的功能,而且shortlist of problems on Wikipedia 也提出了一些值得深思的原因。

【讨论】:

  • 这看起来像是对另一个问题的回答。
猜你喜欢
  • 2017-05-19
  • 2010-11-13
  • 2011-07-26
  • 2010-11-12
  • 2016-02-09
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
相关资源
最近更新 更多