Prolog语言基础知识
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Prolog语言基础知识
一.数据结构
PROLOG语言与其他任何一种计算机高级语言一样,有其定义的数据结构。下面将介绍PROLOG语言的基本数据结构。
1.常量
常量是数据结构的基本组成部分,用来对特定对象及关系的命名。
在PROLOG语言中,合法的常量有:
(1)整数,一个纯数字串,例 182 000,581 202。
(2)原子,分为两种:
1)标识符:以小写字母开头的,包含字母、数字、下划线的串,例
aBC12,is_。
2)符号:PROLOG语言规定的符号集的非空序列,例?、-、=。若原子用
单引号厂(‘ ’)括住,则可含有任何字符。
(3)字符集ab...z
2.变量
变量是用来表示还无法知道且需要PROLOG程序来确定的客体。变量用变量名表示,变量名与标识符相似,所不同的是以大写字母或下划线开头。例Variable,_ansure。
PROLOG语言中有一个特殊的变量,不需要知道它是什么以及具体名字,只是表示留出一位置,称为匿名变量。用单一的下划线(_)来表示。比如只想知道是否有人喜欢跳舞,但不需知道这个人的名字,这时就可以用匿名变量。
3.结构
结构是PROLOG语言中的第三类数据结构;用于构造PROLOG数据对象。一个结构是一个单一的客体,它由一个函子和一个或多个称为分量的项的序列组成。其书写形式为
函子(分量1,分量2,…,分量n)
其中的分量也可以是结构。
例如可用结构描述事实"Mary住zhongshan路120号":
person(mary,address(zhongshan,120)).
此例中address是一个具有两个分量即路名和门牌号的结构。该结构是作为事实的一个分量出现,它将作为关系中的一个客体来对待。
当然,结构中的分量也可以是结构,如上例可写成:
person(name(mary),address(street(zhongshan),number(120))).
其中name,address,street,number均为结构。这样,该事实的表示更一目了然了。
在PROLOG语言中,常用的结构形式有:
(1)函子(分量1,分量2,...,分量n)。如上例Mary的住所。
(2)表。表是PROLOG语言中最常用的数据结构,它由一些有序分量组成,其长度可任
意。有序即表示表中的分量次序是有意义的。同样,表的分量可以是原子、结构等,当然也可以是表。
例如含有3个分量a,b,c的表可写成[a,b,c]。如用函数的方式可写成.(a.(b.
(c[])))。其中符号"."是表的函子,也就是说,表是以"."为函子的特殊结构。
(3)表达式。PROLOG语言提供了各种运算,如算术运算、比较运算等。PROLOG语言中的运算可以是中缀形式,简明直观,符合人们的习惯。
算术表达式X+Y&Z中,"+"、"&"便是运算符,该表达式如用函数结构形式来表示就是+ (X&(YZ))。所以,表达式也是一种结构。
PROLOG语言提供了统一的数据结构--项(term)。在PROLOG中,无论是程序还是数据,都是由项构成。
项的定义为
<项>::=<常量>|<变量>|<结构>|“(”<项>“)”
每一个项书写为一个字符串。
二.程序结构
PROLOG语言的程序结构非常简单,由三部分组成,即事实、规则和询问。
1.事实
事实用来说明有关客体及客体之间的相互关系。事实和规则都是逻辑推理的前提。
例如 J ohn喜欢 Mary(J ohn Li k e。Mary)。这是一个事实,它包含了两个客体 J ohn和Mary及一个关系li k es。用PROLOG语言的标准形式描写即为
li k es(j ohn,mary).
事实中的关系(如 li k es)称为谓词,客体称为自变量。事实的语义是表示该语句恒为真。在PROLOG语言的标准形式中,谓词和确定的客体(常量)必须以小写字母开头,而变量客体用大写字母开头,客体间用逗号","分开,用一对圆括号括住,最后用“.”终结。
下面是一些事实的例子:
f emale(j ane).ane是女性。
play(j ane,mary,chess).ane和mary下棋。
关系中自变量的个数是任意的,而语句意义的解释由程序员所确定。如
li k es(j ohn,mary),可解释成J ohn喜欢Mary,也可解释成Mary喜欢J ohn。因此解释一个谓词含义是完全由程序设计者决定的,但一经确定,就必须在整个程序中遵守。
事实的语法与结构相似。事实中的谓词对应于结构的函子,而事实中的自变量则对应于结构的分量。
2.规则
规则是关于客体及其关系的一般陈述,表明某些关系的成立要依赖于其他一些关系的成立。规则可以是事实的一种紧凑的表现形式。
自然语言中,用"如果"一词来说明规则。在PROLOG语言中,规则由规则头和规则体组
成,其间用符号":-"连接。符号":-"表示"如果"。规则用"."结尾。例如"如果某人是学生,则j ohn就喜欢该人"。用PROLOG语言书写应为
li k es(j ohn, X):-student(X).
表示如果student(X)成立,则li k es(j ohn)就成立。
PROLOG语言的规则的一般形式为
p:-p1,p2,p3,…,pn..
其中p1,…pn均为命题。在此,逗号","是合取(∧或并且)的意思。因此,规则的语义是:如果“p1∧p2∧…∧pn”为真,则p就为真,即规则头部就为真。
值得注意的是:在一条规则中,所有相同的变量代表了相同的客体,而在规则的不同次
使用时,变量可以代表不同的客体。但规则的同一次使用中,对一变量的解释必须完全一致。
一个谓词可用一些事实和规则的组合来定义,称为谓词的子句。
可以把PROLOG程序看做是事实和规则的一个库,称为数据库或知识库。PROLOG系统的任务就是依据知识库中的知识(事实和规则的集合)来回答用户的问题。编写PROLOG程序,实际上就是提供所需要的事实和规则,PROLOG系统能使计算机去利用事实和规则及自身所带有的推理方法,从一些事实推理出另一些事实。
3.询问
PROLOG语言是一种可会话式语言。执行一个PROLOG程序实际上就是进行人机对话,在将事实和规则存人数据库或知识库中后,就可以向系统询问一些有关的问题,而问题就是系统求解的目标。
例如设有数据库:
li k es(mary,w ine).
li k es(j ohn,meat).
li k es(j ohn,X):-li k es(mary,X).
就可以询问:"Mary喜欢葡萄酒吗?"或"J ohn喜欢什么?"
PROLOC语言的询问的一般形式为
?- p1,p2,…,pn..
其中"?-"是PROLOG语言询问的特殊符号,p1,p,…pn的意义与规则中的意义相同。询问的语义是:“p1∧p2∧…∧pn”是为真吗?"。
因此,上面的"Mary喜欢葡萄酒吗?"或"J ohn喜欢什么?"询问可分别写为:
?-li k es(mar,w ine).
?-i k es(j ohn,X).
于是,PROLOG系统将根据数据库或知识库中的事实和规则进行推演来回答用户的问题。
三. PROLOG语言的内部谓词
内部谓词是由PROLOG系统预先提供的,而不是由编程者自定义的谓词。它们提供了无法靠程序来定义的功能,为用户提供常用的谓词。编程时可不加定义地直接利用这些谓词,因而为程序设计提供了便利。此外,内部谓词由系统实现,因此它们有很高的执行效率。