Prolog语言及程序设计.pptx
《Prolog语言及程序设计.pptx》由会员分享,可在线阅读,更多相关《Prolog语言及程序设计.pptx(32页珍藏版)》请在课桌文档上搜索。
1、PROLOG语言及程序设计,人工智能语言简介,人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。能够用它来编写程序求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。典型的人工智能语言主要有LISP、Prolog、Smalltalk、C+等。一般来说,人工智能语言应具备如下特点:具有符号处理能力(即非数值处理能力);适合于结构化程序设计,编程容易;具有递归功能和回溯功能;具有人机交互能力;适合于推理;既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹配机制。,PROLOG语言简介,PROLOG(Pro
2、gramming in Logic)是当代最有影响的人工智能语言之一,它是一种以逻辑推理为基础的逻辑型程序设计语言。由于该语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用,已经成为人工智能应用领域的强有力的开发语言。,PROLOG开发环境,1、Turbo Prolog开发与turbo C类似,集成了简单的编辑、编译、调试功能。可以很快的上手,但是在MS-DOS环境下运行。2、PDC Prolog速度快。编译及运行速度都很快,产生的代码非常紧凑。用户界面友好。提供了图形化的集成开发环境。提供了与其他语言(如C、Pascal、Fortran等)的接口。
3、Prolog和其他语言可以相互调用对方的子程序。3、Visual PrologVisual Prolog是基于Prolog语言的智能可视化集成开发环境。Visual Prolog包含一个全部使用Visual Prolog语言写成的有效的开发环境,包含对话框、菜单、工具栏等编辑功能。Visual Prolog与SQL数据库系统、C+开发系统、以及Visual Basic、Delphi或Visual Age等编程语言一样,也可以用来轻松地开发各种应用。4、Amzi!Prologamzi-prolog,这是到目前为止使用的prolog最好用的开发环境。其实就是在Eclipse中集成了prolog的模
4、块。熟悉Eclipse的人使用起来应该会很亲切。所有的编辑、编译、调试都是界面化操作,非常方便。,PROLOG基本语句,Prolog的基本语句仅有三种,即事实、规则和目标三种类型的语句,且都用谓词表示。、事实事实用来说明一个问题中已知的对象和它们之间的关系。在Prolog程序中,事实由谓词名及用括号括起来的一个或几个对象组成。谓词和对象可由用户自己定义。例如,likes(bill,book).表示一个名为like的关系,对象bill和book之间有喜欢的关系。、规则规则由几个互相有依赖性的简单句(谓词)组成,用来描述事实之间的依赖关系。从形式上看,规则由左边表示结论的后件谓词和右边表示条件的前
5、提谓词组成。例如,bird(X):-animal(X),has(X,feather).表示凡是动物并且有羽毛,那么它就是鸟。、目标(问题)把事实和规则写进Prolog程序中后,就可以向Prolog询问有关问题的答案,询问的问题就是程序运行的目标。目标的结构与事实或规则相同,可以是一个简单的谓词,也可以是多个谓词的组合。例如,?-student(john).表示“john是学生吗?”,事实,事实(facts)是prolog中最简单的谓词(predicate)。谓词:Prolog语言的基本组成元素,可以是一段程序、一个数据类型或者是一种关系。它由谓词名和参数组成。两个名称相同而参数的数目不同的谓词
6、是不同的谓词。事实的语法结构如下:pred(arg1,arg2,.argN).其中pred为谓词的名称。arg1,.为参数,共有N个。参数构成规则如下:由大写字母,A-Z;小写字母,a-z;数字,0-9;+-/,.:.?#$等构成。原子通常是字母、数字和下划线组成,开头的字符必须是小写字母,下划线不能放在最前面。使用单引号扩起来的字符集都是合法的原子。变量和原子相似,但是开头字符是大写字母或是下划线,下划线开头的都是变量。,事实,例:door(kitchen,office).?-door(X,office).X=kitchen;X=no.prolog不允许使用除了基本字符以外字符,不允许使用汉
7、字。最末尾的“.”一定不能掉,它表示一个句子结束。以小写字符开头的字符串代表确知的事物,而以大写字母开头的字符串表示未确定的事物,让解释器找到答案。上面的“;”是人工输入的,当解释器找到一个答案之后,它将这个答案输出,并且等待用户的进一步输入,如果用户输入“;”,解释器将继续寻找其他的答案。首先它必须释放(unbinds)变量X。然后从上一次成功的位置的下一条子句开始继续搜索。这个过程叫做回溯(backtracking)。如果输入的是别的符号,解释器将终止查询。最后那个no.是因为,系统在输出了kitchen这个答案以后,用户输入“;”,表示还想知道其他的答案,而解释器又找不到其他的答案了,于
8、是输出no.来终止查询。,规则,规则的实质就是储存起来的查询。它的语法如下:head:-body其中,head 是谓词的定义部分,与事实一样,也包括谓词名和谓词的参数说明。:-连接符,一般可以读作如果。body 一个或多个目标,与查询相同。例:where_food(X,Y):-location(X,Y),edible(X).用语言来描述就是“在房间Y中有可食物X的条件是:X在Y房间中,并且X可食。”,规则的搜索原理,首先,Prolog将把目标和规则的子句的头部(head)进行匹配,如果匹配成功,Prolog就把此规则的body部分作为新的目标进行搜索。实际上规则就是多层的询问。第一层由原始的目
9、标组成,从下一层开始就是由与第一层的目标相匹配的规则的Body中的子目标组成。每一层还可以有子目标,理论上来讲,这种目标的嵌套可以是无穷的。但是由于计算机的硬件限制,子目标只可能有有限次嵌套。,查询谓词间的并且关系,例:?-location(X,kitchen),edible(X).X=apple;X=crackers;no.简单的查询只有一个目标,而混合查询可以把这些目标连接起来,从而进行较为复杂的查询。上面的连接符号,是并且的意思。上面的式子用语言来描述就是“寻找满足条件的X,条件是:X在厨房里,并且X能吃。”如果某个变量在询问中多次出现,则此变量在所有出现的位置都必须绑定为相同的值。所以
10、上面的查询只有找到某一个X的值,使得两个目标都成立时,才算查询成功。,规则子句间的或者关系,例:connect(X,Y):-door(X,Y).connect(X,Y):-door(Y,X).?-connect(kitchen,office).yes?-connect(office,kitchen).yes 意为:“房间X和Y相连的条件是:从X到Y有扇门,或者从Y到X有扇门。请注意此处的或者,为了描述这种或者的关系我们可以为某个谓词定义多个子句。,内部谓词,内部谓词是指已经在Prolog中事先定义好的谓词。在内存中的动态数据库中是没有内部谓词的子句的。当解释器遇到了内部谓词的目标,它就直接调用
11、事先编好的程序。write/1此谓词被调用时永远是成功的,并且它可以把它的参数作为字符串输出到屏幕上。当回溯时,它永远是失败,所以回溯是不会把已经写到屏幕上的字符又给删除的。nl/0此谓词没有参数,和write一样,从Call端口调用时总是成功的,从Redo端口回溯时总是失败的,它的作用是在屏幕上输出一个回车符。tab/1此谓词的参数是一个整数,它的作用是输出n个空格,n为它的参数。其控制流程与上面两个相同。fail/0它的调用永远是失败的。如果fail/0从左边得到控制权,则它立即把控制权再传回到左边,引起回溯。,算术,Prolog专门提供了内部谓词is来计算数学表达式。其语法形式如下:X
12、is 变量X将被赋值为表达式的值,在回溯时不赋值。例:?-X is 2+2.X=4我们还可以使用括号,例:?-X is 3*(4+2).X=18除了is以外,Prolog还提供了一些用来比较大小的操作符。X Y X=Y X=3.X=4?-X is 2+2,3=X.no,数据管理内部谓词,asserta(X)把子句X当作此子句的谓词的第一个子句加入到动态数据库中。它和I/O内部谓词的流程控制相同。回溯是失败,并且不会取消它所完成的工作。例如:如果内存中已经有了下面的几个事实:people(a).people(b).people(c).如果运行了asserta(people(d)之后,内存中的pe
13、ople/1的子句就变成了下面这个样子:people(d).people(a).people(b).people(c).assertz(X)和asserta/1的功能类似,只不过它把X子句追加为最后一个子句。retract(X)把子句X从动态数据库中删除。此操作也是永久性的,也就是说回溯的时候不能撤销此操作。,联合,Prolog的最强大的功能之一就是它内建了模式匹配的算法-联合(Unification)。变量&任何项目:变量可以与任何项目绑定,其中也包括变量。原始项目&原始项目:两个原始项目(原子或整数)只有当它们相同时才能联合。结构&结构:如果两个结构的每个相应的参数能联合,那么这两个结构可
14、以联合。为了更清楚地介绍联合操作,我们将使用Prolog的内部谓词=/2,此谓词当它的两个参数能够联合时成功,反之则失败。它的语法如下:=(arg1,arg2)为了方便阅读,也可以写成如下形式:arg1=arg2 注意:此处的等号在Prolog中的意义与其他语言中的不同。它不是数学运算符或者赋值符。,数据结构,通过把这些最简单的数据组合起来,可以生成复杂的数据类型,我们称之为结构。结构由结构名和一定数量的参数组成。这与以前所学过的目标和事实是一样的。functor(arg1,arg2,.)例:location_s(object(candle,red,small,1),kitchen).loca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Prolog 语言 程序设计

链接地址:https://www.desk33.com/p-379177.html