第11章VisualProlog数据元素.ppt
《第11章VisualProlog数据元素.ppt》由会员分享,可在线阅读,更多相关《第11章VisualProlog数据元素.ppt(42页珍藏版)》请在三一文库上搜索。
1、2004.11.3,AI程序设计,1,第11章 Visual Prolog数据元素,本章介绍Visual Prolog的数据元素,内容包括论域段(Domains Sections)、通用类型和根类型(Universal and Root Types)等。,2004.11.3,AI程序设计,2,第11章 Visual Prolog数据元素,11.1 论域段 11.2 通用类型和根类型 本章小结 本章习题,2004.11.3,AI程序设计,3,11.1 论域段,一个论域段在当前作用域内定义一组论域(参见接口、类声明和类实现)。 domainsSection : domains domainDefi
2、nition-dot-term-list-opt 论域定义 一个论域定义,声明了一个当前作用域内已命名的论域。 domainDefinition : domainName = typeExpression 如果在右边的论域表示一个接口或一个复合论域,那么所定义的论域就是类型表达式的同义词(即完全相同)。否则,所定义的论域称为类型表达式所指示的论域的子类。在这里,论域名domainName应当是小写标识符。 有些地方必须使用论域名而不是类型表达式: 1) 作为形式变元类型的声明; 2) 作为一个常量或一个事实变量的类型; 3) 作为列表论域中的类型。,2004.11.3,AI程序设计,4,11.
3、1 论域段,类型表达式 一个类型表达式指示一种类型。 typeExpression: typeName compoundDomain listDomain referenceDomain predicateDomain integralDomain realDomain,2004.11.3,AI程序设计,5,11.1.1 类型名,一个类型名或者是一个接口名,或者是一个值论域的名字。值论域这一术语用来指定元素不可变的论域。这里可以说,属于与接口名相一致的论域的对象具有可变的声明,任意其它论域的项都是不可变的。因此,实际上数值类型是除了对象类型以外的其它类型。一个类型名指示与现有论域的名称相应的类
4、型。,2004.11.3,AI程序设计,6,11.1.1 类型名,typeName: interfaceName domainName classQualifiedDomainName interfaceName : lowercaseIdentifier domainName : lowercaseIdentifier,classQualifiedDomainName : className : domainName className : lowercaseIdentifier 这里,interfaceName是一个接口名,domainName是一个值域名,className是一个类名。,
5、2004.11.3,AI程序设计,7,11.1.1 类型名,举例 domains newDomain1 = existingDomain. newDomain2 = myInterface. 在本例中,论域名是existingDomain,接口名myInterface用来定义新的论域。,2004.11.3,AI程序设计,8,11.1.2 复合论域,复合论域(Compound Domains),也称作代数数据类型,用于表示列表、树和其它树形结构的数值。在其简单形式中,复合论域用于代表结构和枚举数值。复合论域可以递归定义,也可以相互或间接递归。 compoundDomain : alignment
6、-opt functorAlternative-semicolon-sep-list alignment : align integralConstantExpression 这里,integralConstantExpression是一个表达式,它必须是在编译时间赋为整数。,2004.11.3,AI程序设计,9,11.1.2 复合论域,如果一个复合论域包含一个算符选项,那么它被视为结构,并且具有与C语言中的适当结构二进制兼容的表示法。 functorAlternative: functorName functorName ( formalArgument-comma-sep-list-opt
7、 ) 这里,functorName是一个算符选项的名称,它应当是小写标识符。FormalArgument为: formalArgument : typeName argumentName-opt argumentName可以是任意标识符,编译器忽略它。复合论域是从它们派生出来的引用论域的子类,否则复合论域与任何其它论域都不具有这样的子类关系。如果一个论域作为一个等价的复合论域进行定义,那么这两个论域是同义类型而不是子类型。意思就是说它们是同一类型的两个不同名字。,2004.11.3,AI程序设计,10,11.1.2 复合论域,举例 domains t1 = ff(); gg(integer,
8、t1). t1是一个带有两个选项的复合论域。第一个选项是空变元算符ff。第二个选项是两个变元的算符gg,采用一个整型数论域和论域t1自身作为参数。因此,论域t1是递归定义的。 以下表达式是论域t1的项: ff() gg(77, ff() gg(33, gg(44, gg(55, ff(),2004.11.3,AI程序设计,11,11.1.2 复合论域,举例 domains t1 = ff(); gg(t2). t2 = hh(t1, t1). t1是一个带有两个选项的复合论域。第一个选项是空变元算符ff。第二个选项是一元算符gg,采用论域t2的项作为参数。t2是一个带有一个选项算符hh的复合论
9、域,算符hh采用两个t1项作为参数。因此,论域t1和t2是相互递归的。 以下表达式是论域t1的项: ff () gg (hh(ff(), ff() gg (hh(gg(hh(ff(), ff(), ff() gg (hh(ff(),gg(hh(ff(), ff() gg (hh(gg(hh(ff(), ff(), gg(hh(ff(), ff(),2004.11.3,AI程序设计,12,11.1.3 列表论域,列表论域(List Domains)代表一个特定论域的值序列。这样,列表T中的所有元素 必须是T类型。 listDomain : typeName * T*是T元素列表的类型。 下列语法
10、用于列表: listExpression : term-comma-sep-list-opt term-comma-sep-list | constantName term-comma-sep-list | factVariableName term-comma-sep-list | functionCall term-comma-sep-list | variableName term-comma-sep-list | anonymousIdentifier term-comma-sep-list | listExpression ,这里,functionCall是一个函数调用,返回一个li
11、stDomain类型的值。ConstantName,factVariableName和ariableName应当是listDomain 类型。每一项都应当是typeName 类型。,2004.11.3,AI程序设计,13,11.1.3 列表论域,实际上,列表仅仅是带有两个算符的复合论域:指示空列表;算符 HD | TL 指示该列表具有表头HD和表尾TL。表头必须是基本元素类型,而表尾必须是一个相关类型的列表。 因此列表从语法上可以被修饰为: E1, E2, E3, ., En | L 是E1 | E2 | . En | L .的简记。 E1, E2, E3, ., En是E1, E2, E3,
12、 ., En |的简记,继而是 E1 | E2 | . En | .的简记。,2004.11.3,AI程序设计,14,11.1.4 引用论域,一个引用论域(Reference Domains)与构造它的原始论域类似,除此之外,引用论域变量的值也可以是自由变量(即“unknown“)。 referenceDomain : reference referenceDomainDescription referenceDomainDescription : typeName compoundDomain listDomain 如果一个引用论域由一个复合论域构造,在算符中嵌套的所有论域也必须是引用论域。
13、 一个引用论域是一个基本的非引用论域的超论域。引用论域不是任何其它论域的子类型。,2004.11.3,AI程序设计,15,11.1.5 谓词论域,一个谓词论域(Predicate Domains)的值是具有相同“签名(signature)”的谓词。就是说,具有相同的参数和返回类型,相同的流模式以及相同的(或加强的)谓词模式。 一个具有返回值的谓词称为函数,而没有返回值的谓词被称为普通谓词,以强调它并不是一个函数。,2004.11.3,AI程序设计,16,11.1.5 谓词论域,predicateDomain : ( formalArgument-comma-sep-list-opt ) ret
14、urnArgument-opt predicateModeAndFlow-list-opt callingConvention-opt formalArgument : predicateArgumentType variableName-opt ellipsis returnArgument : - formalArgument predicateArgumentType : typeName anonymousIdentifier,variableName : upperCaseIdentifier,2004.11.3,AI程序设计,17,11.1.5.1 谓词模式,当声明一个谓词时其模式
15、可以省略。在一个实现内部(即对于一个局部谓词而言),所需的流和模式源自谓词的用法。在一个接口或一个类声明内部(即对于一个公有谓词而言),省略谓词模式意味着该谓词是一个过程procedure,省略流模式意味着所有的参数都是输入参数。 为构造器声明一个谓词模式是非法的,这种谓词总是有procedure模式。,2004.11.3,AI程序设计,18,11.1.5.1 谓词模式,指定的谓词模式可应用于下列流模式的每个成员。 predicateMode : one of erroneous failure procedure determ multi nondeterm 谓词模式可用下列集合来描述: e
16、rroneous = failure = Fail procedure = Succeed determ = Fail, Succeed multi = Succeed, BacktrackPoint nondeterm = Fail, Succeed, BacktrackPoint Fail在集合中是指谓词失败。Succeed在集合中是指谓词成功。 BacktrackPoint在集合中是指该谓词返回时会带一个活动的回溯点。,2004.11.3,AI程序设计,19,11.1.5.2 流模式,流模式(Flow Pattern)定义了参数的输入/输出方向,这些参数与算符 论域相结合,会成为带有单个
17、输入参数的一些部分以及相同输出参数的某些部分 的结构。一个流模式由一个流的序列组成,每个流对应一个参数(比如第一个流 对应第一个参数)。 flowPattern : ( flow-comma-sep-list-opt ) anyFlow flow : i o functorFlow listFlow ellipsis,2004.11.3,AI程序设计,20,11.1.5.2 流模式,省略流(Ellipsis flow)模式 省略流(Ellipsis flow)模式必须与一个省略参数匹配,并且因此只能作为流模式中的最后一个流。 ellipsis : . 算符流 functorFlow 一个算符流
18、functorFlow声明了一个算符和构成该流的所有的流。当然,算符必须在相应参数的论域内。 functorFlow : functorName ( flow-comma-sep-list-opt ) 一个算符流的声明不能包含省略流。,2004.11.3,AI程序设计,21,11.1.5.2 流模式,列表流 列表流恰恰与算符流类似,但却与列表论域具有相同的语法修饰。 listFlow : flow-comma-sep-list-opt listFlowTail-opt listFlowTail : | flow 一个列表流不能包含省略流。 当声明一个谓词时,流模式可以被省略。在一个实现内部(即
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 11 VisualProlog 数据 元素
链接地址:https://www.31doc.com/p-3122991.html