Ale*_*lov 10 erlang functional-programming prolog
Prolog有什么问题?
Prolog非常适合列表和模式匹配,并提供回溯作为奖励.然而几十年来它仍然是一种语言,而功能语言开花繁衍.
以Erlang为例.它的语法来自Prolog,它最初是用Prolog实现的,这非常有趣.也就是说,从Erlang人的角度来看,Prolog存在根本性的错误,或者他们已经根据他们的需求调整了Prolog.
mat*_*mat 18
在我看来,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为胜利!