答案 0 :(得分:5)
基本上,如果您的程序可以轻松地作为声明性的正式逻辑陈述,Prolog(或该家族中的另一种语言)将提供最快的开发时间。如果你使用一个好的Prolog编译器,它也会提供最好的性能和可靠性,因为引擎将有很多设计和开发工作。
尝试用另一种语言实现这种事情往往是一团糟。最干净,最通用的解决方案可能涉及实现自己的统一引擎。即使天真的实施也不是微不足道的,Warren Abstract Machine有一两本关于它的书,并且做得更好至少会涉及一些研究,阅读一些引人头痛的论文。
当然,在现实世界中,程序的关键部分可能会从Prolog中受益,但是使用其他语言可以更好地处理许多其他内容。这就是许多Prolog编译器可以与之交互的原因,例如C。
答案 1 :(得分:4)
与究竟相比? Prolog实际上只是逻辑编程的杰出实现,所以如果你的问题真的是关于编程范式的比较,那确实非常广泛,你应该看here。
如果你的问题更具体地讲述prolog与更常见的OO语言,我会说你真的在比较苹果和橘子 - “优势”(例如它)只是一种不同的思考方式。世界,有时改变你提出问题的方式提供了解决问题的更好工具。
答案 2 :(得分:2)
使用Prolog的最佳时机之一是当您遇到适合使用backtracking解决的问题时。那就是当你有很多可能的问题解决方案时,也许你想根据一些上下文来命令它们包含/排除。这表明存在很多歧义......就像在自然语言处理中一样。
将所有可能的答案写成Prolog条款肯定会更加整洁。使用命令式语言,我认为你真正能做的就是写一个巨大的(真正巨大的)CASE语句,这不是太有趣。
答案 3 :(得分:2)
Prolog固有的东西:
他对“更好”语言的论证是“更少的代码,更多的权力”。 Prolog绝对是“更少的代码”,如果你选择它的后一种风格(打字的),你也会获得更多的力量。使用Prolog时唯一困扰我的事实是我没有列表中的随机访问(没有数组)。
答案 4 :(得分:2)
Prolog是一种非常高级的编程语言。类比可以是(Prolog:C)as(C:Assembler)
为什么不那么用呢?我认为这与我们使用的机器有关;它们基于图灵机。 C可以自动编译成字节代码,但是Prolog被编译为在抽象Warren机器的仿真上运行,因此效率不高。
此外,prolog基于一阶逻辑,它不能以声明方式解决每个可解决的问题,因此,在某些时候,您需要依赖类似命令式的代码。
答案 5 :(得分:1)
我认为prolog适用于知识库构成解决方案重要组成部分的问题。特别是当知识结构适合编码为逻辑规则时。
例如,为特定问题域编写自然语言解释器需要该域中的大量知识。专家系统也属于这种知识驱动的范畴。
这也是探索逻辑难题解决方案的好语言; - )
答案 6 :(得分:1)
我使用Swi-Prolog进行了一年多的编程(为了好玩)。我认为Prolog的一个优点是Prolog没有副作用:Prolog是一种对(本地或类成员)变量没用的语言,它有点迫使程序员不使用变量。 Prolog对象没有状态,有点。我认为。我一直在编写命令行Prolog(没有GUI,除了少数XPCE测试):它就像一条轨道上的火车。