正在加载图片...
·166 智能系统学报 第4卷 想方法,更易于反映现代软件的设计理念。 Godeli语言在描述计算时不仅结构清晰,可读性好 例5 Godeli语言模块系统的构成实例: 适合开发大型软件系统:而且通过引入类型系统实 EXPORT M5 现了可支持抽象数据类型程序设计,为支持面向对 MPORT Lists 象程序设计奠定了基础 BASE Day,Person 4 Monday,Tuesday,Wednesday,Thursday, 元程序设计及其应用 CONSTANT Friday,Saturday,Sunday:Day. 所谓元程序是指那些将其他程序包括自身作为 PRED CATE Append:List (a)*List (a)* 数据进行处理,无需考虑其源程序编程语言特性的 List(a)Append3:List(a)*List(a)* 程序.元程序的重要性主要表现在其大范围的应用 List(a)List(a). 上,如编译器、解释器、程序分析器和程序转换器等 LOCAL M5 另外,当逻辑程序被用于人工智能时通常需要形式 Append (Nil,X.X )Append (Cons (U. 化的知识表示,这些知识可用逻辑程序来表示,元程 X).Y,Cons (U.Z))-Append (X. 序可被视为元推理器,根据这些知识进行推断1 Y.Z). 元程序中如何表示目标程序是元程序中最重要 Append3 (X.Y.Z.U)+-Append X.Y. 的问题.元程序的表示方法主要有2种:基本表示和 W)&Append (W.Z.U). 非基本表示.前者将任一表达式表示为基本表达式, MODULE M6 后者除了将变量用相应的元级变量表示以外,非变 MPORT M5. 量标识符在元程序中表示为对应的常量和函数 PRED CA TE Member2:aa List(a). Pobg采用非基本表示方法】 Member2(X,y,Z)←Append(-,[X 例6设有Pobg程序: 1-1Y1-1Z) 1)member(X.T). 模块M5包含一个输出部分EXPORT和本地部 分LOCAL,其中BASE、CONSTANT和PRED CATE 2)menber(X,[H ])-member(X.T). 若用Poog元程序之一的ove标准解释器可 己在类型系统中介绍,这里重点讨论模块与模块之 表示为 间的连接以及内部的关系.在模块M5中,引入了 Lsts模块,它是处理表结构的系统模块,通过这个 1)solve(member(X,]) 模块,可以执行谓词Append3,它的参数类型是表类 2)solve (member (X.[H I T]))- 型.M6模块引入了前面的自定义模块M5,它除了 clause(member(X.H T1),member (X.T)) 继承Lists模块以外,还使用了M5模块中的Ap solve(member(X,T)). pend3来处理Mem ber2谓词.其中,Append谓词用 当执行sove(X,[1,2,3])时,可以分别得到 于将第1个参数表和第2个参数表合并成新表,并 X=1,2,3.但是,这种非基本表示会在执行过程中 且第1个表在第2个之前.Append.3定义了3个表 由于元级变量的绑定带来一些非说明性语义问题, 的合并操作.在模块M6定义的谓词Mem ber2.中调 例如,当目标子句为Var(X)memberl(X,[l,2, 用了M5中Append3.当且仅当X和Y是列表Z的元 3]),其中元程序子句Var(X)用来判断X是否是 素且X在Y的前面Member2为真.如当询问Mem 自由变量,可以分别得到结果X=1,2,3但是,在执 ber2(Friday,Monday,Thursday,Friday,Monday ] 行目标子句memberl(X,[1,2,3])Var(X)时,却 时,该程序将返回真。 由于X被实例化为1,而使得Var(X)执行失败 同样的程序M6,若用Poog编写,则除了编写 为了解决此问题,Godel采用元程序的另一种表 谓词mmbe2(),还必须重新编写谓词Append3(), 示方法,即基本表示.基本表示的主要特点是将目标 增加了程序语言编写的重复性,结构上也不如 语言表示为元语言中的基本项.上述程序可表示为 Godel语言写的程序 1)if (Aom (member,var (0),Tem (cons, 随着应用的不断深化,各类软件日趋复杂,软件 var(0),var(1)]])true). 生命周期中对开发效率、可靠性、易维护性、易管理 2)if (Atom (member,var (0),Tem cons, 等方面提出了更高的要求.通过引入模块化系统, var(2),var (1)]])Atom (member,var (0), 1994-2009 China Academic Journal Electronic Publishing House.All rights reserved.http://www.cnki.net想方法 ,更易于反映现代软件的设计理念. 例 5 Go¨del语言模块系统的构成实例 : EXPORT M5. IMPORT Lists. BASE Day, Person. CONSTANT Monday, Tuesday, W ednesday, Thursday, Friday, Saturday, Sunday: Day; PRED ICATE Append: List ( a ) 3 List ( a ) 3 List( a) ; Append3: List ( a ) 3 List( a) 3 List( a ) 3 List( a ). LOCAL M5. Append (N il, X, X ). Append (Cons ( U, X) , Y , Cons ( U, Z ) ) ← Append ( X, Y, Z ). Append3 ( X, Y, Z, U ) ← Append ( X, Y, W ) & Append ( W , Z, U ). MODULE M6. IMPORT M5. PRED ICATE Member2: a 3 a 3 List( a ). Member2 ( X, Y, Z ) ← Append3 ( _, [ X | _ ], [ Y | _ ], Z ). 模块 M5包含一个输出部分 EXPORT和本地部 分 LOCAL,其中 BASE、CONSTANT和 PRED ICATE 已在类型系统中介绍 ,这里重点讨论模块与模块之 间的连接以及内部的关系. 在模块 M5中 ,引入了 Lists模块 ,它是处理表结构的系统模块 ,通过这个 模块 ,可以执行谓词 Append3,它的参数类型是表类 型. M6模块引入了前面的自定义模块 M5,它除了 继承 L ists模块以外 ,还使用了 M5 模块中的 Ap2 pend3来处理 Member2谓词. 其中 , Append谓词用 于将第 1个参数表和第 2个参数表合并成新表 ,并 且第 1个表在第 2个之前. Append3定义了 3个表 的合并操作. 在模块 M6定义的谓词 Member2中调 用了 M5中 Append3. 当且仅当 X和 Y是列表 Z的元 素且 X在 Y的前面 Member2 为真. 如当询问 Mem2 ber2 (Friday, Monday, [ Thursday, Friday, Monday ]) 时 ,该程序将返回真. 同样的程序 M6,若用 Prolog编写 ,则除了编写 谓词 member2 () ,还必须重新编写谓词 Append3 () , 增加了程序语言编写的重复性 , 结构上也不如 Go¨del语言写的程序. 随着应用的不断深化 ,各类软件日趋复杂 ,软件 生命周期中对开发效率、可靠性、易维护性、易管理 等方面提出了更高的要求. 通过引入模块化系统 , Go¨del语言在描述计算时不仅结构清晰 ,可读性好 , 适合开发大型软件系统 ;而且通过引入类型系统实 现了可支持抽象数据类型程序设计 ,为支持面向对 象程序设计奠定了基础. 4 元程序设计及其应用 所谓元程序是指那些将其他程序包括自身作为 数据进行处理 ,无需考虑其源程序编程语言特性的 程序. 元程序的重要性主要表现在其大范围的应用 上 ,如编译器、解释器、程序分析器和程序转换器等. 另外 ,当逻辑程序被用于人工智能时通常需要形式 化的知识表示 ,这些知识可用逻辑程序来表示 ,元程 序可被视为元推理器 ,根据这些知识进行推断 [ 5 ] . 元程序中如何表示目标程序是元程序中最重要 的问题. 元程序的表示方法主要有 2种 :基本表示和 非基本表示. 前者将任一表达式表示为基本表达式 , 后者除了将变量用相应的元级变量表示以外 ,非变 量标识符在元程序中表示为对应的常量和函数. Prolog采用非基本表示方法. 例 6 设有 Prolog程序 : 1) member( X, [X | T ] ). 2) member( X, [H | T ] ) ←member( X, T ). 若用 Prolog元程序之一的 solve标准解释器可 表示为 1) solve (member( X, [X | T ] ). 2 ) solve ( member ( X, [H | T ] ) ) ← clause (member(X, [H | T ] ) , member ( X, T ) ) solve (member(X , T ) ). 当执行 solve ( X , [ 1, 2, 3 ])时 ,可以分别得到 X = 1, 2, 3. 但是 ,这种非基本表示会在执行过程中 由于元级变量的绑定带来一些非说明性语义问题. 例如 ,当目标子句为 Var ( X ) member1 ( X , [ 1, 2, 3 ]) ,其中元程序子句 Var( X )用来判断 X 是否是 自由变量 ,可以分别得到结果 X = 1, 2, 3. 但是 ,在执 行目标子句 member1 ( X , [ 1, 2, 3 ]) Var( X )时 ,却 由于 X被实例化为 1,而使得 Var( X )执行失败. 为了解决此问题 , Go¨del采用元程序的另一种表 示方法 ,即基本表示. 基本表示的主要特点是将目标 语言表示为元语言中的基本项.上述程序可表示为 1) if (A tom (member, [ var ( 0 ) , Term ( cons, [ var(0) , var(1) ]) ]) , true). 2) if (A tom (member, [ var ( 0 ) , Term ( cons, [ var(2) , var ( 1 ) ]) ]) , A tom (member, [ var ( 0 ) , ·166· 智 能 系 统 学 报 第 4卷
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有