为什么(不是)逻辑编程?


13

我还没有听说过软件行业中逻辑编程语言(例如Prolog)的任何用法,也不知道它在业余编程或开源项目中的用法。不过,它(Prolog)在某种程度上被用作学术语言(为什么在学术界使用它?)。

这让我感到奇怪,为什么要使用逻辑编程,为什么不呢?为什么没有得到可检测的行业使用率?

Answers:


8

在学术界之外……我听说它在AI中使用得更多,有时在游戏中使用(我听说它在黑白系列中推动了AI的发展)。我也听说过用于某些业务和经济模拟的规则引擎运行的变体。

我对缺乏广泛采用的猜测是:

  • 很奇怪-大多数人不习惯使用它进行编程,他们可以用其他语言来完成他们需要做的事情。
  • 缺乏供应商的支持-如果Microsoft突然开始将Prolog#(具有.NET库和工具集的全部功能以及背后的正式支持)作为下一个重要内容-然后IBM和Oracle提出了一些竞争的方案,我打赌您会看到它捡起来!
  • 缺乏集成-我不知道Prolog有哪些可用的库-上一次我检查了图形或网络库没有太多,这意味着Prolog的“应用程序”必须包装在与其余组件交互的另一个应用程序中世界。

“ Prolog“应用程序”必须包装在与世界其他地方交互的另一个应用程序中。” 这实际上是我们的功能。我们可以更容易地隔离序言位,因为它的接口是如此简单。
S.Lott

@美国洛特:好吧,我可以看到,作为可能正为好,不过当我在学校,想真正与Prolog的应用程序,我发现片之间的管道和布线是一个重大的挑战和障碍。
FrustratedWithFormsDesigner

5

我们用它来构建解析器。它比lex / yacc更容易使用。

为什么没有得到可检测的行业使用率?

这是无法回答的。“可检测”是什么意思?谁需要获取检测备忘录?

http://www.meridiansystems.com/landing/ppc/prolog/getvideo.asp

如果需要事实,请向Meridian Software询问有关其序言产品的信息。

但是,我遇到了一些进入障碍。

首先,序言可能很慢。当有很多候选规则并且没有简单的剪切操作来限制搜索空间时,可能需要一段时间才能完成工作。

其次,序言既不是过程性的也不是功能性的,因此许多程序员都不愿使用它。(有趣的是,一些程序员也讨厌使用SQL。为此,一些程序员会不情愿地使用SQL并做一些奇怪的事情,例如避免联接操作,或者声称这COUNT(*)在魔术上效率低下。)

第三,序言要求对各种情况进行一些非常清晰的思考。程序编程可能比较草率,并且仍然可以可靠地工作。不可执行的语句是可以接受的。

以下内容在大多数圈子中都是可以接受的。

b = a + 1
if a > b: # always False

这种模糊的思维使您陷入麻烦。


2

一个问题是,Prolog并不是真正用一阶谓词逻辑进行编程,这在计算上是棘手的(我不记得在多大程度上,但它不在NP中,并且如果在其上添加算术,则在形式上是不确定的)。因此,这是一个简化。

在逻辑上,一个命题可以被证明是正确的,被证明是错误的,或者不能被任一方法证明。Prolog仅经过验证且未经验证,“未经验证”通常表示错误。而且,Prolog子句的顺序会影响执行,而逻辑子句则不会。在使用它的过程中,我开始将Prolog视为一种模式匹配语言,而不是一种逻辑语言。

因此,Prolog编程不像Prolog语言本身那样很大程度上取决于逻辑正确性。在某些方面它是一种有用的语言,但它远未成为主流,它还没有像C ++这样的语言所具有的工具和社区优势。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.