我想了解更多有关Prolog内部的知识,并了解其工作原理。
我知道如何使用它。但不是内部如何运作。 Prolog中使用的算法和概念的名称是什么?
可能它构建了某种树结构或有向对象图,然后在查询时使用复杂的算法遍历该图。可能是深度优先搜索。可能有一些源代码,但首先从高层次的角度来看它会很棒。
我真的很喜欢人工智能,理解Prolog似乎是一个很好的开始,imho。我的想法是尝试重建类似的东西并完全跳过解析器部分。我需要知道我必须做的研究工作的方向。
答案 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)
我想补充一下:
Programming Languages: An interpreter based approach。这本书已绝版,但您可以在大学图书馆找到它。它包含Pascal中的Prolog实现。
Tim Budd的“C ++中的Kamin口译员”(in postscript)
答案 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解释器:
其中,最后一个是最清楚的(以我的拙见)。但是,你需要学习一些Lisp(Common Lisp或Scheme)来理解它们。
答案 6 :(得分:2)
Prolog使用一阶谓词逻辑的子集,称为Horn逻辑。用于推导答案的算法称为SLD解析。
答案 7 :(得分:0)
除了已经发布的许多好的答案之外,我还在Prolog上添加了一些历史事实。