Prolog有什么问题?
Prolog在列表和模式匹配方面非常出色,并提供回溯作为奖励。然而几十年来它仍然是一种语言,而功能语言开花繁衍。
以Erlang为例。它的语法来自Prolog,它最初是用Prolog实现的,这非常有趣。也就是说,从Erlang人的角度来看,Prolog存在根本性的错误,或者他们已经根据他们的需求调整了Prolog。
答案 0 :(得分:16)
在我看来,Prolog现在开始变得有趣,而且陪审团仍在讨论这个问题。
是的,Prolog的传统比Erlang长得多。从实现的角度来看,它也是一种很多更复杂的语言!教学也要困难得多,例如,由于传统上已经将所有其他语言的初学者无法解决的任务作为Prolog初学者的前几个例子而加剧。
获取回溯,垃圾收集,别名,属性变量,约束,异常处理以及Prolog为您提供的许多其他内容 正确且高效,同时尊重它们经常非常微妙的相互依赖性即使一些最有才华和受过教育的程序员参与其中,这是可以理解的在短短几十年内无法实现的。目前可用的许多Prolog系统刚刚达到您可以在生产环境中认真使用它们的程度。
使Prolog的一个愚蠢的版本高效和正确是相对容易的。与真实事物无关。
为了进行比较,请执行任何严重程序,并查看其实施时间。最有趣的节目在首次发布后数十年仍处于严重发展阶段。与Prolog相同,完整的Prolog系统肯定比许多其他语言实现提供了更多。
我们想要真实的东西!所以,是的,Prolog有问题:很难正确实施。但是Prolog的功能非常多,因为上面提到的众多功能:一旦完全实现,Prolog就是一个惊人的和无与伦比的开发环境,适用于各种任务,从定理证明了网络托管,解决组合优化问题,测试用例生成以及现在出现的许多其他应用程序。
例如,正在为Prolog开发Erlang风格的流程。例如,参见TorbjörnLager的Pengines。
为什么这只是现在(即,过去2年左右)才能在Prolog中使用?非常简单:许多Prolog系统(在这种情况下:SWI-Prolog)直到最近才能稳健地运行24x7 Web服务器。 那为什么呢?再一次,因为它很难为Prolog做到这一点,因为它的许多先进功能之间存在着微妙的相互依赖性。慢慢地,我们终于到了那里。
获胜的Prolog!
答案 1 :(得分:3)
语言必须能够比其他语言更好地对现实问题进行排序才能成为主流。谈到Erlang,它只不过是另一种功能语言,如果不是它的软实时编程能力,具有抢先式多任务处理能够处理数百万个并发任务。这加上它在VM中运行的能力是一个真正强大的组合。从这个意义上讲,这些新增功能使Erlang独一无二。事实上,它是业内广泛使用的唯一actor-oriented编程语言。
看看有多少种不同的C / C ++方言被创造出来,而C / C ++仍然是主流。那些新方言根本没有给已经存在的方面带来任何好处(或者说不够大)。
我确信Prolog有其利基,但它并没有提供其他语言能够提供的内容,shortlist of problems on Wikipedia也提出了一些值得思考的原因。