Prolog在技术上如何运作?引擎盖下有什么?

时间:2011-05-04 09:38:32

标签: artificial-intelligence prolog

我想了解更多有关Prolog内部的知识,并了解其工作原理。

我知道如何使用它。但不是内部如何运作。 Prolog中使用的算法和概念的名称是什么?

可能它构建了某种树结构或有向对象图,然后在查询时使用复杂的算法遍历该图。可能是深度优先搜索。可能有一些源代码,但首先从高层次的角度来看它会很棒。

我真的很喜欢人工智能,理解Prolog似乎是一个很好的开始,imho。我的想法是尝试重建类似的东西并完全跳过解析器部分。我需要知道我必须做的研究工作的方向。

8 个答案:

答案 0 :(得分:23)

  

Prolog中使用的算法和概念有哪些名称?

见Sterling& Shapiro, Prolog的艺术(麻省理工学院出版社)为Prolog背后的理论。

  

可能它构建了某种树结构或有向对象图,然后在查询时使用复杂的算法遍历该图。深度优先搜索可能。

它没有明确地构建图形,即使对于无限的搜索空间也是如此。查看Russell & Norvig的第一章,了解状态空间搜索的概念。是的,它使用回溯进行深度优先搜索,但不是,这不是很复杂。这只是非常方便,编程替代搜索策略在Prolog中并不是非常难。

  

了解Prolog似乎是一个很好的开始方式,imho。

取决于你想做什么,但知道Prolog肯定不会受到伤害。这是一种看待编程的非常不同的方式。了解Prolog帮助我很快理解了函数式编程。

  

我的想法是尝试重建类似的东西并完全跳过解析器部分

你的意思是跳过Prolog语法?如果您恰好熟悉Scheme或Lisp,请查看section 4.4 of Abelson & Sussman,其中解释了如何在Scheme中实现Scheme的逻辑编程变体。

答案 1 :(得分:19)

AI是一个广泛的领域,Prolog只触及符号AI。至于Prolog,内部工作太复杂,无法在这里解释,但谷歌搜索将为您提供充足的资源。例如。 http://www.amzi.com/articles/prolog_under_the_hood.htm

同时查阅维基百科的文章,了解人工智能的其他方面。

答案 2 :(得分:13)

您可能还想了解Warren Abstract Machine 通常,prolog代码被转换为WAM指令,然后更有效地执行。

答案 3 :(得分:4)

我想补充一下:

答案 4 :(得分:3)

Prolog的ISO核心标准还包含执行模型。执行模型很有意义,因为它提供了一个很好的控制结构模型,如cut!/ 0,if-then-else( - >)/ 2,catch / 3和throw / 1。它还解释了如何一致地处理裸变量。

ISO核心标准中的演示并不是那么糟糕。每个控件构造都以散文用例的形式描述,其中引用了由堆栈等组成的抽象Prolog机器。然后有一些图片显示了在执行控件构造之前和之后的堆栈。

最便宜的来源是ANSI:
http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+13211-1-1995+%28R2007%29

答案 5 :(得分:2)

larsmans提到的Sterling和Shapiro的书实际上包含了Prolog的执行模型。这很好,并清楚地解释了“Prolog如何工作”。这是一本很棒的书!

您还可以尝试其他来源。最值得注意的是,一些Lisp书籍构建了以教学为导向的Prolog解释器:

  • 由Paul Grap撰写的Lisp(在Common Lisp中,使用 - 也许是滥用 - 宏)
  • Peter Norvig的人工智能编程范例(在Common Lisp中)
  • Abelson和Sussman的计算机程序结构和解释(在计划中)。

其中,最后一个是最清楚的(以我的拙见)。但是,你需要学习一些Lisp(Common Lisp或Scheme)来理解它们。

答案 6 :(得分:2)

Prolog使用一阶谓词逻辑的子集,称为Horn逻辑。用于推导答案的算法称为SLD解析。

答案 7 :(得分:0)

除了已经发布的许多好的答案之外,我还在Prolog上添加了一些历史事实。

  • Wikipedia on Prolog:Prolog由Alain Colmerauer与Philippe Roussel于1972年左右创建,基于Robert Kowalski对Horn子句的程序解释。 阿兰(Alain)是1970年至1995年的法国计算机科学家和艾克斯·马赛大学教授。他于2006年退休,一直活跃到2017年去世。他于1986年被法国政府任命为荣誉骑士勋章。 li>
  • Prolog的发明人可以在本文Prolog in 10 figures中最好地解释Prolog的内部作品。它发表在ACM通讯,第1卷。 28,编号12月12日。 1985年。