1智能控制基础ShanghaiUniversity,Shanghai,P.R.China7.智能控制语言Prolog7智能控制语言Prolog7.1什么是Prolog语言7.2Prolog入门---事实7.3Prolog入门---查询7.4Prolog入门---规则7.5Prolog入门---算术7.6Prolog入门---内部谓词7.7Prolog入门---递归和表7.8Prolog入门---截断7智能控制语言Prolog7.1什么是Prolog语言7.2Prolog入门---事实7.3Prolog入门---查询7.4Prolog入门---规则7.5Prolog入门---算术7.6Prolog入门---内部谓词7.7Prolog入门---递归和表7.8Prolog入门---截断Prolog(ProgramminginLOGic的缩写)是一种逻辑编程语言。它建立在逻辑学的理论基础之上,最初被运用于自然语言等研究领域。现在它已被广泛的应用在人工智能的研究中,它可以用来建造专家系统、自然语言理解、智能知识库等。同时它对一些通常的应用程序的编写也很有帮助。使用它能够比其他的语言更快速地开发程序,因为它的编程方法更象是使用逻辑的语言来描述程序。什么是Prolog?7.1什么是Prolog语言Prolog语言(或者系统)是以一阶谓词逻辑的Horn子句集为语法,以Robinson的消解原理为工具,加上深度优先的控制策略而形成的人工智能通用程序设计语言Prolog的理论基础7.1什么是Prolog语言Horn子句集消解原理深度优先Prolog系统Prolog的理论基础7.1什么是Prolog语言Prolog的发展历史?7.1什么是Prolog语言Prolog语言最早由Aix-Marseille大学的AlainColmerauer与PhillipeRoussel等人于60年代末研究开发。第一个Prolog编译器是DavidWarren编写的。Prolog一直在北美和欧洲被广泛使用。日本政府曾经为了建造智能计算机而用Prolog来开发第五代计算机系统80年代Borland开发的TurboProlog,进一步普及了Prolog的使用1995年确定了ISOProlog标准Prolog很适合于开发有关人工智能方面的程序,例如:专家系统、自然语言理解、定理证明以及许多智力游戏。曾经有人预言Prolog将成为下一代计算机的主要语言为什么要用Prolog开发程序?7.1什么是Prolog语言理论上来说使用c语言可以编制任何种类的程序,甚至连Prolog语言都是使用c语言编写的。不过对于急于开发应用程序的用户,最关心的是如何最经济最有效率的开发程序,Prolog提供了一个选择的余地Prolog程序的特点7.1什么是Prolog语言Prolog程序没有特定的运行顺序,其运行顺序是由电脑决定的,而不是编程序的人从这个意义上来说,prolog程序不是真正意义上的程序。所谓程序就是按照一定的步骤运行的计算机指令,而prolog程序的运行步骤不由人来决定。它更像一种描述型的语言,用特定的方法描述一个问题,然后由电脑自动找到这个问题的答案。既然程序的运行方式有电脑自己决定,当然就用不到这些控制流程的语句了。通常情况下,程序员不需要了解程序的运行过程,只需要注重程序的描述是否全面,不过Prolog也提供了一些控制流程的方法,这些方法和其他语言中的方法有很大的区别。Prolog程序的特点7.1什么是Prolog语言Prolog程序中没有if、when、case、for这样的控制流程语句。在prolog程序中,是很难分清楚哪些是程序,哪些是数据的。事实上,prolog中的所有东西都有相同的形式,也就是说数据就是程序,程序就是数据。11c语言中程序和数据是分开的!Prolog程序的特点7.1什么是Prolog语言prolog程序和数据高度统一Prolog程序的特点7.1什么是Prolog语言递归是一种非常简洁的方式,它能够有效的解决许多难题。在prolog中,递归的功能得到了充分的体现prolog程序实际上是一个智能数据库prolog的原理就是关系数据库,它是建立在关系数据库的基础上的。使用prolog可以很方便的处理数据。强大的递归功能和其他的语言一样,最好的学习方法是实践。本课程将使用swiProlog的解释器来向大家介绍几个具体的应用程序的编写过程。首先你应该拥有一个Prolog的解释器,你可以在互联网上找到它。关于解释器的使用,请参阅相关的使用说明文档,建议使用amziprolog或者swiprolog来运行课程中出现的程序。进入prolog世界7.1什么是Prolog语言假设你所扮演的角色是一个三岁的小女孩,你想睡觉了,可是没有毛毯(nani)你就不能安心的睡觉。所以你必须在那个大房子中找到你的毛毯,这就是你的任务角色扮演游戏-小女孩找毛毯7.1什么是Prolog语言7智能控制语言Prolog7.1什么是Prolog语言7.2Prolog入门---事实7.3Prolog入门---查询7.4Prolog入门---规则7.5Prolog入门---算术7.6Prolog入门---内部谓词7.7Prolog入门---递归和表7.8Prolog入门---截断事实(facts)是prolog中最简单的谓词(predicate)。它和关系数据库中的记录十分相似。7.2Prolog入门---事实谓词:Prolog语言的基本组成元素,可以是一段程序、一个数据类型或者是一种关系。它由谓词名和参数组成。两个名称相同而参数的数目不同的谓词是不同的谓词。事实&&谓词事实(facts)谓词(predicate):•参数可以是–整数(integer):绝对值小于某一个数的正数或负数。–原子(atom):由小写字母开头的字符串。–变量(variable):由大写字母或下划线(_)开头。–结构(structure):在以后的章节介绍。7.2Prolog入门---事实事实的语法结构pred(arg1,arg2,...argN).其中pred为谓词的名称。arg1,...为参数,共有N个。‘.’是所有的Prolog子句的结束符。原子通常是字母和数字组成,开头的字符必须是小写字母。例如:7.2Prolog入门---事实事实的语法结构--(原子)下面的是不合法的原子:123nodigitsatbeginningNocapsfirst下划线不能放在最前面a_long_atom_namez_23为了方便阅读,可以使用下划线把单词分开。例如hellotwoWordsTogetherx147.2Prolog入门---事实事实的语法结构--(原子)使用单引号扩起来的字符集都是合法的原子:下面的由符号组成的也是合法的原子:'this-hyphen-is-ok''UpperCase''embeddedblanks',++变量和原子相似,但是开头字符是大写字母或是下划线。例如:7.2Prolog入门---事实事实的语法结构--(变量)下划线开头的都是变量XInput_List7.2Prolog入门---事实【示例2-人们在一个聚会上的穿戴】wears(mary,dress).wears(tina,trousers).wears(fred,suit).wears(terry,suit).wears(tina,red_blouse).wears(fred,white_shirt).wears(terry,blue_shirt).从定义基本的事实开始,这些事实是本游戏的基本的数据库。它们包括:7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯•房间和它们的联系•物体和它们的位置•物体的属性•玩家在游戏开始时的位置room(kitchen).room(office).room(hall).room('diningroom').room(cellar).7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯首先我们使用room谓词定义房间,一共有五条子句,它们都是事实。在这里,我们只定义单向的门:7.2Prolog入门---事实寻找Nani游戏door(office,hall).door(kitchen,office).door(hall,'diningroom').door(kitchen,cellar).door('diningroom',kitchen).下面我们来表达房间的联系。使用door来表示两个房间有门相连,如door(office,hall).我们想要表达的意思是office和hall之间有一个门,但是Prolog能够区分door(office,hall)和door(hall,office),需要把每种联系都定义一遍?door(office,hall).door(hall,office).从定义基本的事实开始,这些事实是本游戏的基本的数据库。它们包括:7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯•房间和它们的联系•物体和它们的位置•物体的属性•玩家在游戏开始时的位置我们使用具有两个参数的谓词来定义物体的位置。第一个参数代表物体的名称,第二个参数表示物体的位置。谓词location的意思是“第一个参数所代表的物体位于第二个参数所代表的物体中”。开始时,我们加入如下的物体:7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯location(desk,office).location(apple,kitchen).location(flashlight,desk).location('washingmachine',cellar).location(nani,'washingmachine').location(broccoli,kitchen).location(crackers,kitchen).location(computer,office).从定义基本的事实开始,这些事实是本游戏的基本的数据库。它们包括:7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯•房间和它们的联系•物体和它们的位置•物体的属性•玩家在游戏开始时的位置7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯定义关于食物的一些属性为:edible(apple).edible(crackers).tastes_yucky(broccoli).从定义基本的事实开始,这些事实是本游戏的基本的数据库。它们包括:7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯•房间和它们的联系•物体和它们的位置•物体的属性•玩家在游戏开始时的位置7.2Prolog入门---事实角色扮演游戏-小女孩找毛毯定义手电筒(由于是晚上,玩家必须找到手电筒,并打开它才能到那些关了灯的房间)的状态和玩家的初始位置。turned_off(flashlight).here(kitchen).7智能控制语言Prolog7.1什么是Prolog语言7.2Prolog入门---事实7.3Prolog入门---查询7.4Prolog入门---规则7.5Prolog入门---算术7.6Prolog入门---内部谓词7.7Prolog入门---递归和表7.8Prolog入门---截断现在我们的数据库中已经有了一些事实,使用Prolog的解释器调入此程序后,我们就可以对这些事实进行查询了。7.3Prolog入门---查询Prolog的查询工作是靠模式匹配完成的。查询的模板叫做目标(goal)。如果有某个事实与目标匹配,那么查询就成功了,Prolog的解释器会回显'yes.'。如果没有匹配的事实,查询就失败了,解释器回显'no.'。从事实到查询–目标谓词名与数据库中的某个谓词名相同。–这两个谓词的参数数目相同。–所有的参数也相同。7.3Prolog入门---查