高中信息技术 浙教版选修五程序实例.pptx
Prolog程序实例,在正式介绍Prolog之前,先以最常见的家庭关系为例,阐述如何用Prolog语言来描述这个问题。家庭关系对大家来说是非常熟悉的,但是一般的程序设计语言表达起来就不太方便了。用Prolog语言能较清楚地对家庭关系进行描述。以小明同学的家庭关系为例,小明家里有五口人,父亲(小王)、母亲(小张)、祖父(老王)和祖母(老李)。他们家的家庭关系可以用下图表示。,1,初识Prolog程序,由小明的家庭关系图所示,很容易看出小明家庭中各成员之间的关系。下面给出用Prolog语言表示的家庭关系程序,目的是使同学们对Prolog程序有个初步的总体的认识。表示家庭关系的Prolog程序如下:father(xiaowang,xiaoming)./*小王是小明的父亲*/father(laowang,xiaowang)./*老王是小王的父亲*/husband(xiaowang,xiaozhang)./*小王是小张的丈夫*/husband(laowang,laoli)./*老王是老李的丈夫*/,mother(X,Z):-father(Y,Z),husband(Y,X)./*如果Y是Z的父亲、并且Y是X的丈夫,则X是Z的母亲*/grandfather(X,Z):-father(Y,Z),father(X,Y)./*如果Y是Z的父亲并且X是Y的父亲,则X是Z的祖父*/grandmother(X,Z):-grandfather(Y,Z),husband(Y,X)./*如果Y是Z的祖父,并且Y是X的丈夫,则X是Z的祖母*/?-mother(Who1,xiaoming)./*谁是小明的母亲?*/?-grandfather(Who2,xiaoming)/*谁是小明的祖父?*/?-grandmother(Who3,xiaoming)./*谁是小明的祖母?*/,运行这个程序,计算机便能够回答我们提出的有关小明家庭关系的问题。例如问,小明的母亲是谁?小明的祖母是谁?等等。虽然上面的语句中没有直接说明,但计算机就会根据规则、推理找到答案,小明的母亲是小张,小明的祖母是老李,同学们一定会感到自常惊讶,井且非常想知道其中的奥秘。接下来,就让我们大家走进Prolog语言的殿堂,感受Prolog语言的魅力。,2,Prolog的基本语句,观察上面的程序,不难发现,程序共有三部分组成。先来研究第一部分的内容。father(xiaowang,xiaoming).father(laowang,xiaowang).husband(xiaowang,xiaozhang).husband(laowang,laoli).这一部分内容在上一章的谓词表示部分曾学习过在这里,我们把这服分内容中的各项叫做事实,这部分内容共有4条事实。1.事实事实是对某一事物或概念的陈述,一般用来表示对象的性质、状态或对象之间的关系。,事实一般形式为:(参数1,参数2,).例:color(apple,red)./*苹果的颜色是红的*/color(tomato,red)./*西红柿的颜色是红的*/animal(fowl)./*飞禽是动物*/fruit(X)./*X是水果*/vegetable(What)./*What是蔬菜*/其中的参数可以是常量,也可以是变量。常量是在程序的执行过程中其值不能改变的量,一般用小写英文字母数字、下划线等组成的字符串来表示。如,apple,tomato,red,my_book等。变量是指在程序运行过程中其值可以改变的量,一般用大写字母开头,使用字母、数字、下划线等组成的字符串来表示。如,X,What,Who2等。,在描述事实时,要注意:(1)在Prolog中谓词名是以小写英文字母、数字、下划线等组成的字符串;如father,color3均为合法的。而像Desk,pen$等是非法的。(2)参数之间用“,”号隔开,如color(apple,red).(3)在Prolog中用句点“.”表示一条事实陈述语句的结束。如father(xiaowang,xiaoming).2.规则观察描述小明家庭关系的程序,在四条事实的下面有这样一些语句mother(X,Z):-father(Y,Z),husband(Y,X).grandfather(X,Z):-father(Y,Z),father(X,Y).grandmother(X,Z):-grandfather(Y,Z),husband(Y,X).,其中“:-”表示“如果”,“:-”前后各项便是我们上面所述的事实。上面的语句用自然语言来表述如下:如果Y是Z的父亲,并且Y是X的丈夫,那么X是乙的母亲。如果Y是Z的父亲,并且X是Y的父亲,那么X是Z的祖父。如果Y是Z的祖父,并且Y是X的丈夫,那么X是Z的祖母。我们称此类语句为规则。规则是知识的一种类型,用于表示对象之间的因果关系、蕴含关系成对应关系。一个规则由头和体两部分组成,头是“:-”符号的左部,体是“:-”符号的右部,头和体由符号“:-”相连。“:-”的意思是“如果”,“,”表示“并且”。规则的一般形式为:(参数):-(参数),(参数),一条规则的意义可以解释为:当体部(前提部分)的各个条件都满足时,则头部(结论)成立。例:likes_to_eat(mary,X):-fruit(X),color(X,red)./*如果X是水果,并且是红色的,则玛丽喜欢吃X*/friend(X,tom):-likes(X,sports)./*如果X喜欢运动,则X是汤姆的朋友*/在描述规则时要注意:(1)在Prolog语言中,如果要说明一个事实依赖于另一个或另一事实时,就可以使用规则。(2)若规则体内有两个或两个以上事实,且事实之间是“与”的关系,则事实之间用“,”号隔开,例如:celor(X,red),fruit(X).若规则体内事实之间的分隔符是“;”,则表示事实之间为“或”的关系(3)每条规则后面也要附上个圆点“.”,作为结束标志。,3.询问继续观察小明的家庭关系程序,注意下面的内容:?-mother(Who1,xiaoming).?-grandfather(Who2,xiaoming).?-grandmother(Who3,xiaoming).其中,“?-”表示询问,是用来表示用户所提出的问题,这三条语句可用自然语言表示如下:谁是小明的母亲?谁是小明的祖父?谁是小明的祖母?,询问(question)是询问某种关系是否成立的疑问句,是程序运行的目标。询问的一般形式为:?-(参数).例:?-student(xiaoming)./*小明是学生吗?*/?-like(mary,music)./*玛丽喜欢音乐吗?*/?-friend(john,X)./*约翰是X的朋友吗?*/,THEEND,