知识工程T-PROLOG(7)

2019-03-16 15:06

clauses elsedef if or

constants enddef ifdef predicates database global ifndef

(2)特殊谓词

下述谓词由编译程序作特殊处理,不要在程序中重新定义这些名: assert chain_terms format retractall asserra consult free save

asserz db_btrees not term_replacea bound db_chains readterm trap chain_inserta fail ref_term write chain_insertafter findall retract writef chain_insertz

2.程序段

Turbo PROLOG程序由若干程序段组成,每一程序由一关键字来标识,如下表示:

表6-1 程序段内容

段 编译指令 constants段 domains段 database段 predicates段 goal段 clauses段 内容 编译指令出现在程序开关 零个或多个常量定义 零个或多个域说明 零个或多个数据库谓词说明 零个或多个谓词说明 零个或一个目标 零个或多个子句 用户编写的程序不一定要包括上述的所有段。然而一个程序也可包含多个domains,predicates,database或clauses段,但须遵守如下几条限制。

①常量、域及谓词应该先定义后使用。不过,在domains段中可引用后面说明的域。

②在编译程序中只能满足一个目标。该目标可出现在说明其子目标的domains段后的任一地方。

③所有描述同一谓词的子句必须依次(一个接一个)出现。 ④所有全局说明必须在局部说明之前。

⑤可对database段命名,但给定的名只能出现一次。因为默认名是dbasedom,故只能有一个未命名database段。

下面讨论各个程序段的内容和描述形式。 (1)领域段

领域含有领域说明,有四种模式可以采用: ①标准域

name=d

该说明定义了一个领域name,其元素类型是标准类型d. d只能是integer,char,real,ref.string,symbol.该说明用于定义语法上相同而语义不同的对象。

②表域

mylist=elementDom *

这是定义表域的一种简便方法。Mylist是一个表组成的领域,其中元素来自领域elementDom .领域elementDom既可以是用户定义的领域,也可以是标准域类型。说明中的星号“*”读作“表”,例如,领域说明

Mumberlist=integer * 定义了一个整数表的领域。

③复台对象域

myCompDom=f1(d11,?,dle);f:(d21,d22,?)?定义一个复合对象组成的领域,且说明了一个函子和所有子元素的领域。

例如,现定义一个域owners,其元素形式为: owns(john,book(wuthering-heights,bronte)) 我们可如下定义:

owners=owns(symbol,book) book=book(symbol,symbol)

此处owns是复合对象的函子,而symbol和book则是子元素的领域。

这种领域说明的右边可定义几个不同的复合对象,其间用分号(;)或关键字分开,每一复合对象必须含唯一的函子及其子元素的领域说明。

④文件域

file=namel;name2;?;nameN

若想用符号名(非预定义名)来访问文件,则必须定义文件域。一个程序只能有一个该类型的域,且须以file标识。给出的堵符号文件名则作为file域的可选文件名。

下列可选文件名是在file域中预定义的: keyboard stdin soreen stdout printer stdert (2)谓词段

Turbo PROLOG中,以关键字predicate开头的段是用来说明谓词的。说明谓词时应指出谓词名及参数的领域,如:

predname(domain1,domain2?,domain)

其中predname是谓词名,而domain1,domain2?,domainN表示用户定义的领域或标准 型领域。

谓词亦可仅由名字构成。例如,可以用如下的规则来定义谓词choose-teams:

Choose_teams:_smae_league(X,Y),never_played(X,Y),write(X,Y),其中,谓词choose_teanis就不带参量。

允许对同一谓词作多次说明。例如下面谓词member说明以数和名字均有效: member(name,namelist) member(name,numberlist)

其中,name,namelist,number和numberlist都是用户定义的领域。在对同一谓词作多次说明时,参量个数必须相同,但不要求具有一样的参数。

(3)子句段

子句是与已说明过的谓词相应的事实或规则,通常一个子句可以是: ①一个事实。

②一个子句头,后跟冒号再加连字符(:—),以及一张谓词调用表,其中谓词由逗号或分号隔开。

不论是事实还是规则都必须以句点结尾。其中有些符号可用下面符号代替;

符号“:-”可用关键字if代替。 符号“,”可用关键字and代替。 符号“;”可用关键字or代替。

例如,Turbo PROLOG事实same-ieague(ucla,use).

是由单一原子(本身为一名字)same-league和一个用括号括起来的项表(ucla,use)构成。

项可以是(简单)常量、变量或复合项,现分别详细地说明如下: ①简单常量(simple constants)

简单常量是属于字符领域、整数领域、实数领域、串领域、符号领域和文件领域六种标准类型领域之一:

字符(character):属于字符类型领域(两个单引号括起来的8位ASCII字符可以用一个换码符(ESCAPE Symbol)即反斜线(\\)后跟一个ASCII代码来标识。例如,\\n和\\t分别产生一个新行字和一个制字符。反斜线后紧跟的任一其它字符均产生那个字符本身。

整数(integer):属于整数领域类型,其取范围为-32768到32767间所有整数。

实数(real):属于实数领域类型,其取值范围为±1E-307到±1E308。实数的书写格式为一个正负号后接带(或不带)小数点的尾数部分,再接由一个正负号、E和指数组成的指数部分,格式中均不能有空格。格式中的正负号、小数点、指数部分均是可缺省,必要时,整数将自动转换成实数。

串(string):属于串领域类型(是由双引号括起来的任意的字符序列)。字符串中可以包含由上面所述的ESCAPE序列即反斜线所产生的字符。

符号常量(symbolic constant):属于符号领域类型(是以小写字母开头的名字)。串也可用为符号,但符号要保存在一张查找表格中以便快速匹配。符号表格的缺点是造表需要耗费时间和占用存储空间。

符号文件名(symbolic filename):属于文件领域,是以小写字母开头的名字,出现在文件领域说明的右边,或是预先定义的符号名:printer,screen,keyboard和coml等。

②变量(variables)

变量是以大写字母开头的名字,至于无名变量,可用一个下横线表示,若对

变量的值不感兴趣,则可用无名变量表示之,未同其它项结合的变量称这为自由变量,实例化后就称为约束变量。例如,已同一个项合一后的变量即为约事变量。谓词feen(X)成功的条件是:变量X已约束为一个值。

③复合项或结构(compound terms or structures)

复合项或结构是一个由称为描述名的函子和一组称为成分的其它对象组成的单对象。这些成分括在圆括号中且两两之间用逗号隔开。函子写在左圆括号之前。

例如,下述复合项由函子author和三人成分构成: author(fmily,bronte,1818)

复合项属于用户定义的领域。对应复合项author的领域定义有: domains

authors=author(firstname,lastname,year_of_birth) firstname.lastname=symbol ④表( lists )—一种特殊的复合项

表是 Turbo PROLOG中一种常用的数据结构,实际上它是复合对象的一种形式,表由括在方括号中的若干项组成,项之间用逗号隔开。

例如,[1,2,3.8,—3.2]是一张整数表,它属于用户定义的领域。 即:

domains list=integer

当表中元素是多种类型,则这些类型都必须同时分别说明。对于下面的说明:

domains

element=c(char);i(integer) list=element*

所允许表的形式是:

[1(12).1(34),C(‘X’),C(‘Y’),C(‘Z’),i(987)] (4)数据库段

数据库段象谓词段一样说明谓词,但在数据库段中的谓词仅能包括无变量的事实,这些事实在运行时 自assert,asserta,assetrz及consult插入,并可由retract或retractall删去,在程序中可以有多个数据库段,有些是全局的,


知识工程T-PROLOG(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:职务型经济犯罪疑难问题对话录

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: