人工智能程序设计语言----Prolog
1概述
1970年由法国马赛大学Alain Colmerauer等开发,作为逻辑程序设计的工具。
很多著名的专家系统外壳都用Prolog编写,如ESP/Advisor, APE, X1等。
程序特点:陈述式语言。只要给出必要的事实和规则,Prolog就可以用演绎推理自动求解问题。而过程式语言必须告之求解过程才行。
实例与基本概念:
一个Prolog的实例程序如下:
domains /*领域声明段*/
person,activity=symbol /*域person和activity的声明,symbol为标准域*/
predicates /*谓词格式说明段*/
likes(person,activity) /*likes为谓词名,表示某人person喜欢activity活动*/
clauses /*子句段*/
likes(ellen,tennis). /*事实:ellen喜欢tennis*/
likes(john,football).
likes(tom,baseball).
likes(eric,swimming).
likes(mark,tennis).
likes(bill,X):-likes(tom,X). /*规则:tom喜欢的,bill也喜欢*/
goal /*目标段*/
likes(bill,football). /*考察bill是否喜欢football*/
变量:以大写字母开头,后跟若干数字、下划线、字母组成的符号名称。是在满足目标时,其值未知的量。例如:likes(X_Persons,tennis).中的X。
对象与关系:谓词表示一个或多个对象之间的某种关系。例如:likes(mark,tennis).中的likes谓词表示某人喜欢某类活动。其中,mark和和tennis分别是关系likes中的对象。
又如:owns(susan,horse).
eats(jill,meat).
valuable(gold). /*黄金是值钱的*/
注:对象名和关系名都必须以小写字母开头。
领域与谓词:谓词是用语描述事实和关系的。但与此相关的谓词之涉及对象的领域范围必须明确。因此,在Prolog中,需要对关系中的对象的域进行声明。例如:likes(person,activity).表明,谓词likes中第一个参数为person域,第二个为activuty域。如果目标中输入likes(12,x),系统将给出一个领域类型错的信息。因为,第一个参数不属于person域,此处即symbol域。
复合目标:由多个子目标构成的问题目标描述。例如:likes(tom,X) and likes(erric,X)。
无名变量:即谓词参数中以下划线表示时,该变量称为无名变量。表示此时该变量的值无关紧要。例如:likes(_,baseball) and likes(ellen,tennis).表示只要有人喜欢baseball,ellen就喜欢tennis。car(_,_,Age,_,Cost) and Cost<$以下的车,并给出其使用年限和价格。
无名变量用于事实时,表示任意或全部都成立。例如:owns(_,shirt).表示人人都有一件衬衣。washface(_).表示人人都洗脸。
回溯:当子目标匹配或搜索失败时,回到最近的成功点继续进行余下的事实或规则的匹配的过程。以如下程序为例:
domains
child=symbol
age=integer
predicates
pupil(child,age)
clauses
pupil(peter,9).
pupil(chris,9).
pupil(paul,10).
pupil(susan,9).
问题:安排一次班级上9岁同学的乒乓球比赛,每对运动员赛两场。则目标子句可描述pupil(P1,9) and pupil(P2,9) and P1<>:
子目标1
子目标2
子目标3
结果
说明
peter
peter
peter<>peter
失败
回溯到第二子目标
chris
peter<>chris
成功
回溯到第二子目标继续寻找下一组解
susan
peter<>susan
成功
子目标2已搜索完毕,回溯到子目标1
chris
peter
chris<>peter
成功
回溯到第二子目标继续寻找下一组解
chris
chirs<>chris
失败
回溯到第二子目标
susan
chris<>susan
成功
子目标2已搜索完毕,回溯到子目标1
susan
p
人工智能程序设计语言 来自淘豆网m.daumloan.com转载请标明出处.