为什么没有抓住逻辑编程?

随着时间的推移,函数式编程越来越像是对其他编程语言产生了更多的影响。 在我的AI类中,我们开始使用Prolog,似乎有些事情会让非AI领域的编程变得更容易。 我的问题是这样的:为什么逻辑编程没有以相同的方式被捕获?

在这个话题中,似乎已经达成了一个普遍的共识,即逻辑程序设计是有用的,但必须如此证明。 有没有理由不认为它有用?

更新 :也许我应该更清楚一点。 我没有真正问过Prolog。 我可以看到为什么选择Prolog用于大多数真实世界的应用程序并不是一个好主意。

为了举一个更多我在谈论的例子,请考虑Python中的列表推导/映射/过滤器。 这些显然受功能语言的影响。 为什么像Python这样的语言还没有从逻辑编程语言中汲取这些东西,比如他们有功能语言?


当你了解使用Prolog的计算机科学课程中的逻辑编程时,最重要的不是让你成为一名熟练的Prolog程序员,而是开放你的思维去交替形式的编程技术(数据结构/算法)以前没有考虑过。

为了说明我开始学习计算机科学时的观点,我的工程学院曾经要求所有的学生都使用Pascal编写他们的软件程序,但是自从我毕业后,我从来没有使用过Pascal。 但我通过选择正确的数据结构和算法学到的技能仍然每天都在使用。

帕斯卡并没有作为我知道的语言出现在我的简历上,但它在我作为软件工程师的培训中发挥了重要作用。 它的有用性不仅可以通过当前正在生产的Pascal代码的行数来衡量。

当你开发软件时,你会意识到,即使你没有编写一行Prolog代码,你有时也会重复使用你可能在这些“无用的”Prolog或AI类中学到的技术。

评估技术(特定编程语言,特定软件工具/应用)的有用性不仅仅是评估其实际使用水平,而是评估其影响。

如果你看看逻辑编程在专家系统,计算机游戏AI,空中交通管制以及其他许多领域(任何人的建议?)所具有的影响力,我不认为可以说逻辑 - 编程没有抓住...


我花了大约4年的编程职业生涯,开发基于规则的“专家系统”,根据客户需求为电话交换提供和配置硬件。

它非常成功,据我所知在十多年后还在日常使用。 但找到能够理解它如何工作的程序员比开发系统本身更重要。

我认为这就是为什么这种方法没有起作用,因为与可以理解程序和函数式编程概念的人数相比,很少有人对基于逻辑的编程有必要的心态。

逻辑程序设计语言提供了一种机制,将事实和推理规则提供给一个“推论引擎”,然后启动这个推理引擎,将规则应用到给定的事实中以产生新的事实。 一种特定的逻辑语言站在或落在它特定的推理机的力量之上。

Prolog的推理引擎有一个非常天真的实现,效率非常低。 在大多数过程语言中,通过在循环中编写大量if语句,可以更有效地解决同样的问题。

我们为“配置器”选择的语言是DEC的RuleWorks,它是对更广为人知的OPS5语言的改进。 这有一个基于Rete算法的推理引擎,它比程序方法更有效率。

由于DEC被惠普吞噬的Compaq吞噬了,RuleWorks已经成为开源并且可以从这个网页获得。

对这种技术没有更多的兴趣是一种耻辱,因为它们可以非常有效地解决各种难以解决的问题。


我对普通Prolog的印象是它是一种玩具语言。 这并不是说逻辑编程不可能有用。 例如,在Twelf中,可以很容易地为一种简单的编程语言声明语义,并使声明充当解释器。 我也听说过一些关于λProlog的好消息。

我想在尝试使用逻辑编程语言作为通用语言时遇到的问题是,有些任务不能很好地适应这个概念。 我认为,逻辑编程功能需要被纳入一种语言中,该语言也具有势在必行的功能结构。 至少有一种这样的语言:奥兹,但我还没有尝试过。

编辑:有一个想法我想尝试一段时间:将关系数据库作为原子提供给Prolog,并用它来执行查询而不是SQL。 我有一种感觉,这将是对SQL的重大改进。

链接地址: http://www.djcxy.com/p/79403.html

上一篇: Why hasn't logic programming caught on?

下一篇: How Concurrent is Prolog?