为什么Prolog对AI编程有好处?[关闭]


25

我正在研究用于AI编程的编程语言。我知道LISP在我的大学中是作为AI编程语言教授的,但Prolog很少教授。我有点喜欢Prolog,但是我不是AI程序员,所以我认为我没有资格自己判断为什么Prolog比LISP / Scheme更好。我想知道程序员是否对此主题有任何投入。

您如何辩称Prolog对AI编程会更有用?

我一直在研究它,而我一遍又一遍地看到的基本论据是,由于思想是用逻辑表达的,而Prolog是一种逻辑编程语言,因此Prolog可以轻松构建决策机器,或达到某种程度的效果。

AI中的Prolog还有什么可以说的吗?


1
用Lisp编写Prolog编译器/解释器不需要很多工作。保罗·格雷厄姆(Paul Graham)在《On Lisp》中有一个例子。
拉里·科尔曼

我的一位同学也告诉我这一点。我发现LISP的符号操作可以让我重新创建Prolog真的很有趣。感谢您的支持!
2011年

4
@Larry Coleman:用Lisp编写朴素的Prolog编译器/解释器并不需要很多工作。在任何语言中,打造高效,功能齐全的产品都是不平凡的。
只是我的正确观点

Answers:


19

从序言到人工智能Prolog编程

Prolog是一种编程语言,围绕一小套基本机制,包括模式匹配,基于树的数据结构和自动回溯。这个小集合构成了一个令人惊讶的强大而灵活的编程框架。Prolog特别适合涉及对象(尤其是结构化对象)及其之间关系的问题。例如,在Prolog中表达对象之间的空间关系很容易,例如蓝色球体在绿色球体后面。陈述一个更通用的规则也很容易:如果对象X比对象Y更靠近观察者,并且Y比Z更近,则X必须比Z更近。Prolog现在可以推断空间关系及其与遵守一般规则。像这样的功能使Prolog成为通用的人工智能(AI)和非数字编程的强大语言。有一些著名的符号计算示例,这些符号在其他标准语言中的实现占用了数十页的难懂代码。当在Prolog中实施相同的算法时,结果是一个清晰的程序,很容易放在一页上。

基本上,这是一种很棒的语言,用于以简洁,(大多数)可读和(半)自然的方式表达各种关系和目标。例如,Lisps中的等效代码趋向于更加冗长和模糊,因为您花费大量时间进行胆量以及管理和推理关系的工作。


我在这里的次要补充是Prolog允许您声明事实,然后基于这些事实进行规则。然后,Prolog可以使用您的规则通过逻辑推断答案来推理和回答其他查询。例如,如果某个事实说明A是B的祖先,而另一个事实则说明B是C的祖先,那么Prolog可以推断出A必须是C的祖先,而无需编写检查它的算法。
code_dredd

25

我在我的本科生中介绍了AI课程,并使用Prolog让我们实施了专家系统。

专家系统是用于解决非常具体的问题的软件,其解决方案取决于大量的规则和变量。

例如,您可以想象有一个专家系统,该系统告诉您外出时是否应该带上雨伞;您将为其提供一组数据(是否多云,前一天是否下雨,什么季节等),并且专家系统会通过规则为您提供答案(如果天气多云并且下雨了前一天,那么您应该带把伞)。

Prolog的性质使实现规则和事实非常容易(在Prolog中,一切都是规则或事实),然后“查询数据库”(获取问题的答案),即使您有成千上万的规则和事实。

如果您对该主题感兴趣,我建议您安装Prolog解释器并尝试实施一个非常基本的专家系统以了解它-它可能有助于您了解为什么它是执行这些任务的强大工具。


我在研究中读到,Prolog使专家系统易于实施。感谢您的支持并提供一些解释:)
2rs2ts 2011年

16

区别有点像使用SQL进行数据库查询,而不是用C编写程序。在SQL中,您说的是您想要的-但您不必(直接)指定用于派生它的算法。

Prolog程序有时称为数据库,但实际上是一组谓词逻辑语句。评估机制接受查询并根据谓词逻辑语句对查询执行替换,进行搜索以查找正确的解决方案。所有所需的搜索算法(比SQL查询要复杂得多)都内置在Prolog编译器中。

如果您要在C语言中天真地实现相同的逻辑,则SQL查询只需要循环和if / else条件语句即可。

用C语言实现的Prolog查询将(至少)需要使用联合查找技术进行回溯搜索。同样,这是一个幼稚的解决方案。

某种AI编程涉及Prolog进行的许多搜索类型。毫不奇怪,实际上-最初AI编程是用Lisp或其他语言完成的,但是Prolog是专门为完成这项工作而编写的。

谓词逻辑是定义AI问题样式的自然方法,在Prolog中,一旦有了该定义,就可以直接运行它,而不必实现所有那些笨拙的搜索算法。


3

我在大学学习了2个Prolog模块,并且非常喜欢用该语言进行开发。

它对专家系统特别有用,我写了一篇医学症状诊断书。

它向我解释的方式是Lisp在某些国家/地区倾向于使用更多的Prolog,而在其他国家/地区则倾向于使用Prolog。

就最好的而言,当我在理论计算机科学模块中进行lambda演算时,我只简要介绍了Lisp,因此我偏向于Prolog。

如果您正在开发用于处理规则和事实以得出答案的应用程序,那么Prolog非常好,并且自然支持回溯。

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.