第4卷第4期 智能系统学报 Vol.46.4 2009年8月 CAAI Transactions on Intelligent Systems Ag.2009 doi:10.3969/i.i8gn.1673-4785.2009.04.011 Godel语言控制机制的研究与实现 高伟,赵致琢,李慧琪,昌杰 (厦门大学信息科学与技术学院,福建厦门361005) 摘要:G8dl语言是在Prolog语言基础上发展而来的一种新型逻辑程序设计语言,而控制机制是逻辑程序设计语言 的核心内容.针对Prolog语言控制机制存在的问题,引出了Godel语言中新的控制机制,包括DELAY延迟机制和剪 枝操作然后通过实例分析,表明了这些新机制能有效地避免递归谓词的低效或无限循环调用,并能够实现子目标的 协同执行,从而提高系统的运行效率.针对这一有效改进,在对Gd©l语言控制机制比较深入研究的基础上,最后给 出了G6dl语言控制机制的实现算法.该算法已在研发的G6del语言编译系统中得以实现,通过实例测试,验证了算 法具有较高的效率 关键词:Godel语言;控制机制;延迟;剪枝 中图分类号:TP312文献标识码:A文章编号:16734785(2009)04-034507 Research and implementation of the control facility of Godel language GAO Wei,ZHAO Zhi-zhuo,LI Hui-qi,CHANG Jie (College of Information Science and Technology,Xiamen University,Xiamen 361005,China) Abstract:Godel,a new logic programming language that emerged from Prolog,has at its core a control facility.Af- ter an analysis of problems with the control facility in Prolog,the authors proposed new control facilities for Godel which include a'delay computing'and a 'pruning'operation.Examples showed that adoption of the new facilities effectively prevents inefficient or infinite loop calling of a recursive predicate and allows coroutining between subfor- mulas,so that the efficiency of the system is considerably improved.Furthermore,an algorithm was proposed that could provide the control facility in Godel.The algorithm was applied in the Godel compiler developed by our group.The high efficiency of the algorithm was verified through testing. Keywords:Godel language;control facility;delay;pruning 作为一个典型的逻辑程序设计语言,Prolog具 知,Prolog语言控制机制存在不足,针对这一问题, 有语法简单、清晰、可读性好等优点,有较强的可表 Cdl语言引人了新的语言成分,改进了控制机制, 达性能力.但是,Prolog语言也存在不足之处,主要 即延迟计算和剪枝操作.深人分析和理解Gdel语 是其缺乏类型、执行效率不高、控制机制不完善等, 言各种新的语言成分,对于语言编译系统的实现具 不足以支撑大型软件系统的开发] 有重要的意义. G6del语言是继Prolog语言之后出现的新型说 作为一种新型的逻辑程序设计语言,Godl语 明性通用逻辑程序设计语言,它充分吸收了逻辑程 言能否真正走向成功,主要取决于其是否有一个高 序设计研究领域的最新成果,对Prolog语言存在的 效率的编译或解释实现系统.迄今为止,就是语言的 缺陷做了诸多改进,引入了类型系统,增加了新的语 设计者们,也仅实现了一个旨在验证语言功能的原 言成分,这些都使得Gdl语言成为一种功能更加 型系统.在对Gdel语言的控制机制比较深入的分 强大、高效的说明性逻辑程序设计语言2】.众所周 析和理解的基础上,本文给出了Gdel语言控制机 制的一种实现算法,从而能够为该语言的完全实现 收稿日期:20080904. 提供支持 通信作者:赵致琢.E-mail:zzzhao(@xmu.ed血.cm
.346. 智能系统学报 第4卷 表,如此下去系统将进入无限循环4们 1 Prolog语言中的控制问题 在Prolog语言中,为解决此问题而引人了附加 为便于理解和分析,还需要先来回顾Prolog语 的控制机制cuts),如可在上例中Append的第I条 言控制机制存在的问题。 定义子句后增加cut原语(!),改写为 例1设有Prolog程序P和目标子句G:← Append([],X,X)←-!. B1AB2A·AB,则Prolog程序的运行机制可概 虽然这样做可以避免上述的无限循环,但不能 括为 提高系统效率,而且影响了程序的可读性,甚至会影 1)从左到右,即逐个解决子目标B,B2,…,B。; 响一些调用的正确性,另外,Prolog语言编译系统中 2)深度优先,即在子目标B1完全解决之前不去 有时也可采用重新调整定义子句和子目标的次序等 处理B2,…,B,; 方法来解决一些控制问题.例如,当Append3用于 3)从上到下,即解决B,时先试用程序中它的第 表的分解时,可改变定义中的Append的子句顺序, 1条定义子句C,若成功转入C的体,直到后面解题 以提高效率.但这一方法缺乏通用性,对一些问题无 遇到困难或要求更多的解时才会回到原处去试用后 济于事.例如.目标: 面的定义子句(回溯)31, +-Append3(X,Y,Z,[1,2,3]). 上述过程体现了Prolog程序执行时基本的控制 对Prolog系统来说,无论如何重新安排子目标 机制.Prolog系统由于严格按照从左到右、深度优 与子句,或是使用cut,程序在输出列表[1,2,3]的 先、从上到下的匹配控制机制,而缺乏其他有效的控 所有可能的划分后都将陷入无限循环.因此,需要一 制机制,这样,在许多情况下将导致系统执行的低效 种既能提高效率又能避免死循环的控制机制,而且, 率且可能引起无限循环,也可能破坏系统的完备性 还应能较好地体现程序的说明性语义, 例2考虑下面的Prolog程序P1: 2 Godel语言中的DELAY延迟机制 1)Append([]X,X). 2)Append([HI T],Y,[H])Append (T, 针对Prolog语言控制机制存在的问题,Godel语 Y,Z). 言对Prolog语言的控制机制进行了改进,引入了 3)Append3 (X,Y,Z,U) DELAY延迟机制和剪枝操作.虽然Godel程序的执 +Append (X,Y,W)Append (W,Z,U). 行和Prolog程序一样都是采用最左深度优先搜索策 Append(X,Y,Z)是表的联结操作,表示将表 略的反驳一消解方法;但其推理过程在从左到右、深 X放在表Y前面构成一个大表Z;Append3.(X,Y, 度优先的控制基础上,合理使用延迟计算和灵活运 Z,U)表示将表X、Y、Z按顺序联结成一个大表U. 用剪枝操作,可以解决上述死循环的问题, 如果目标为←-Append3([1,2],[3],[4],X). 下面是个典型的Gdel语言计算排序问题的 Prolog程序会将3个表合并在一起得到X=[1,2, 程序实例G1. 3,4];但是,如果把Append3定义用于表的分解就 MODULE Slowsort. 会出现问题.例如,如果目标为:←Append3(X, PREDICATE Slowsort:List(a)*List(a); [3],[4],[1,2,3,4]),根据Append3的定义,第1 Permutation:List(a)*List(a); 个调用Append(X,[3],W),将与Append的第1 Sorted:List(a); 个定义子句相匹配,X实例化为[],Append的第2 Delete a List(a)*List(a). 个调用失败产生回溯.第1个调用重新匹配后,X实 DELAY Slowsort(x,y)UNTIL 例化为长度为1的表,第2个调用再次失败产生回 NONVAR(x)VNONVAR (y); 湖.第1个调用再重新匹配,X实例化为长度为2的 Sorted([]UNTIL TRUE; 表,这时,第2个调用Append成功,X=[1,2].由 Sorted([_I x ]UNTIL NONVAR(x); 此可见这个计算的时间开销数量级为X长度的平 Delete(_,y,)UNTIL 方,而不是理想的与X长度成正比的数量级.进一 NONVAR(y)V NONVAR(2). 步考虑回溯的情况.不难看出,回溯使第1个调用将 Slowsort(z,y)-Sorted(y)Permutation(,y). X实例化为长度为3的表,第2个调用当然失败.此 Sorted([])←{Tue_1. 时,再次回溯到第1个调用,X实例化为长度为4的 Sorted([])+True1
第4期 高伟,等:G6del语言控制机制的研究与实现 ·347· Sorted([x,ylz])←-{x≤y1 Sorted([ylz]). Append3(X,Y,Z,U)+-Append(X,Y,W)A Permutation([],]) +Append(W,Z,U). Permutation([xI y],[ul v]) 程序中的DELAY说明表示调用Append时第1 ←Delete(u,[xly],z)Permutation(z,v). 个参数和第3个参数必须至少有一个是非变量,如 Delete (x,[xI y],y)True2. 果满足不了该条件,则调用被延迟挂起.系统在引起 Delete (x,[yl z],[yl w])x y2 Delete(x,z,0). 延迟的变量上做标记,以示某过程调用等待此变量 模块Slowsort给出了实现排序的Gdel语言程 被实例化为非变量,一旦标记变量被实例化,所有其 序.程序中Slowsort(x,y)表示对列表x排序后得到 上等待的过程调用立即被唤醒,成为当前优先执行 列表y,其中,调用的谓词Permutation(x,y)表示列 的子目标.例如:←-Append(X,[2],[1,2])满足 表y是列表x的一个排列,而谓词Sorted(x)表示x DELAY说明,过程被成功调用.然而对于: 是一个有序列表.DELAY说明表示当x和y至少有 ←-Append(X,[2],Y),由于第1个参数和第3个参 一个已约束时,SlowSort才能计算;而Sorted(x)调 数同时为变量不满足DELAY说明,过程调用将被 用只有当列表x为空或者在前2个元素已知的情况 延迟,并在这些变量上做标记.一旦X、Y中任一变 下才可以执行,否则延迟计算.谓词Sorted有3个定 量被实例化为非变量,延迟的Append立即被唤醒 义子句并且都包含了剪枝号为1的剪枝,这表示如 重新调用执行. 果在匹配时有一个子句匹配成功,则不再尝试匹配 2.2 DELAY延迟机制的使用 其他2个含有相同剪枝符号1的子句.从这个例子 运用DELAY延迟机制能确保某些调用被充分 不难看出Godel语言引入的这些新机制使语言具有 实例化后才运行,从而增强程序的可终止性以避免 更强的说明性,同时语言的控制也变得更加灵 死循环.另外,DELAY延迟的使用可以实现子目标 活).下面来详细介绍DELAY延迟机制. 的协同执行,从而增强程序的有效性.下面通过例子 2.1 DELAY延迟说明的语法和语义 来说明这2点。 DELAY延迟说明的语法形式为 1)考察前面的Prolog程序P1中的目标:←-Ap DELAY Atom UNTIL Cond. pend3(X,[3],[4],[1,2,3,4]) 其中,Atom是原子.Cond语法规则如下: 在Gdel程序G2中的执行情况: Cond→Cond1 I Cond1{∧Cond1 I Cond1{V 第1个调用执行Append(X,[3],W),发现 Cond1, Append的第1、第3个参数同时为变量,不满足Ap Cond1-NONVAR Variable I GROUND pend的DELAY说明,调用被延迟,并在第l、第3个 Variable )I TRUE I Cond ) 变量上做标记.然后,调用Append3的第2个子目标 其中,Cond对原子中出现的变量延迟调用条件进行 Append(W,[4],[1,2,3,4]),它满足DELAY说 说明,Variable是出现在Atom中的变量,关键字 明,将W实例化为[1|T,],立即唤醒W上的延迟调 NONVAR表示延迟条件是变量,已实例化,关键字 用,重新执行第I个Append调用,Append(X, GROUND表示变量为基本项.程序通过DELAY说 [3],[1IT])满足DELAY说明,合一成功将X实 明限制谓词过程的调用,调用如果满足则进行处理, 例化为[i|T2],接着调用Append(T2,[3],T), 否则延迟挂起调用 调用被延迟;再选下一个子目标Append(Ti,[4], 将前面的Prolog程序PI改写为带DELAY延 [2,3,4])继续执行,如此往复执行直到目标合一成 迟说明的Godel程序G2如下: 功.从调用的执行过程可见,2个Append调用是并 PREDICATE Append:List(a)List(a)* 发执行的,它们的时间开销与X的长度成正比,要 List(a); 低于Prolog系统中的时间数量级(X长度的平方), Append3:List a)*List a)* 因此,系统效率将得到很大提高.注意:Prolog程序 List(a)*List(a). P1调用目标←-Append3(X,Y,Z,[1,2,3]),将陷入 DELAY Append(X,_,Z)UNTIL 无限循环. NONVAR(X)V NONVAR(Z) 但是,在Godel程序G2中由于存在Append的 Append([]X,X). DELAY说明,该目标在输出所有可能的划分后正常 Append([HI T],Y,[HI Z ])+-Append (T,Y,Z). 结束(具体调用过程不再累述).由此可见,DELAY
·348 智能系统学报 第4卷 说明即可避免Append过程被低效地执行,也可使 声明剪枝条件,无需了解归结的控制过程.这既减轻 其避免无限循环. 了程序员的负担,又增强了程序说明性语义与过程 2)下面通过对Gdel程序G1的实例运行可更 性语义的一致性, 有效地说明Godel程序中DELAY延迟机制的合理 3.1 commit剪枝 使用可以促进子目标的协同执行,从而增强程序的 Godel语言的剪枝(commit)机制是对Prolog中 有效性 cut的改进,它建立在并发语言的commit机制之上, 设程序目标为←-Slowsort([6,1,5,2,4,3],x). 具有更好的说明性语义,可用于对搜索树进行剪枝, 第1个调用Sorted(x),发现x为列表变量,不 进而影响搜索的完全性,以提高问题求解的效率, 满足Sorted的DELAY说明,调用被延迟并在变量x Godel语言剪枝算子是commit,.一般形式为{…}n 上做标记.然后,调用Slowsort的第2个子目标Per- (n代表整数标号),有2个特殊形式:一解剪枝 mutation([6,1,5,2,4,3],x),满足Permutation的 (one-solution commit)和条形剪枝(bar commit).一 延迟说明,调用成功,x被实例化为[611],但还是 解剪枝形式为{….,当它找到{}所包含的公式的 不满足Sorted的DELAY说明,故继续执行Permuta- 一个解之后返回,其他可能的解将被剪除.条形剪枝 tion的调用.当x被实例化为[6,1|2]时,满足Sor- 形式为“”,其含义相当于合取,其作用范围是语句 ted的DELAY说明,此时立即唤醒x上的延迟调用, 体内出现在其左边的公式,只求出其辖域内公式的 重新执行Sorted(x)调用.由于x的前2个元素[6, 一个解,而搜索树中其他谓词定义中包含“”的语 1]不是有序的,程序放弃排列结果[6,112],Sor 句的相关分支均被剪除.Gdel语言中剪枝操作的2 ted(x)将重新延迟.Permutation调用回溯,重新产 种特殊形式经过处理,在计算机内部它们都可用一 生排列;当x被实例化为[1,612]时又满足Sorted 般形式{…}-n来表示.一个剪枝操作{Formula{-_n 的DELAY说明,并立即唤醒x上的延迟调用,重新 的括号{.·}指明了该剪枝在语句体中的作用范 执行Sorted(x)调用.这时,由于x的前2个元素 围,而标记n是剪枝号(标签),用于标识某一剪枝. [1,6]是有序的,Sorted进行递归调用.依此循环处 当公式Formula成功时,这个定义语句中的所有其 理,程序将很快得到[6,1,5,2,4,3]的排序结果[1, 他包含相同标记n的语句所对应的树枝将被剪掉. 2,3,4,5,6] 条形剪枝操作记为“1”,每条Godel程序语句最多 如果没有采用上面基于Sorted上的DELAY说 只能含有一个“1”.“1”的作用范围就是在语句体 明,那么程序运行时每次都要完整地算出列表x上 内出现在“”左边的那个公式.如果一个程序中某 的每个元素,而长度为n的列表的排列个数为n!,所 语句含有“1”,那么该程序将在求出“1”辖域中公 以,计算时间复杂度为O(n!).然而,如果采用DE 式的一个解后,剪除由同一谓词定义的语句中包含 LAY说明后执行这样的目标所花的时间将大大减 了“”的语句所产生的搜索树中的所有其他分支 少,时间复杂度为O(n).可见DELAY延迟计算促 举例如下,设某程序中有3条语句如下所示: 进了子目标的协同执行,从而产生的惰性计算的效 Partition([],,][])1, 果,使得Godel程序的排序比对应的Prolog程序的 Partition([xlxs],y,[x|s],bs)←-x≤yl 排序效率更高。 Partition (xs,y,ls,bs), Godel语言中的剪枝操作 Partition ([x I xs],y,ls,[xI bs])+x>yl Partition (xs,y,ls,bs). 在Godel语言的控制机制中,除了DELAY延迟 上述语句定义了快速排序程序中的分割函数, 机制外,还有一个重要的控制机制,即剪枝操作.有 即当第1个参数列表不为空时,根据表中元素y(列 点类似于Prolog中的cut机制,Godel语言也提供了 表元素)的值把该列表分为比y大的部分和比y小 对反驳一消解树进行不完全搜索的方法,即剪枝操 的部分,分别存在第4个和第3个参数列表中.3条 作.但剪枝操作与cut不同,剪枝操作有效地解决了 语句中都含有“1”,它的目的是保证这3条语句互 Prolog中cut带来的诸如程序的逻辑部分界定的不 斥.即当列表为空时第1条语句被执行,而第2和第 准确性、存在否定时Cut造成求解结果不可靠等问 3条语句对应的分枝被剪除,因为此时第2和第3 题.剪枝与cut机制最本质的区别在于cut机制需要 条语句根本没有必要执行;而当列表不空时第2和 程序员了解程序的归结过程,而剪枝只需要程序员 第3条语句中的某一句将被执行,另外2条程序语
第4期 高伟,等:G6del语言控制机制的研究与实现 ·349· 句对应的分枝将被剪除.如果没有这个“1”,那么3 DELAY延迟机制既能够发挥剪枝的有效性,又保证 条语句将被一起尝试执行,这将浪费大量的时间.由 了程序的完备性. 这个例子可以看出,剪枝操作在保证程序正确性的 剪枝运算在编写风格良好的Godel程序中较少 基础上,极大地提高了执行效率. 使用,代之以否定或f-then-else等说明性结构,这主 已经知道,条形剪枝是commit剪枝的特例,它 要是为了保证程序具有清晰的说明性语义,尽管剪 可以转换为commit剪枝.转换方法如下:将“|”左边 枝操作可能影响程序的说明性语义,但合理的剪枝 的子目标作为commit剪枝的条件(对于事实子句, 可以使程序执行速度和问题求解的效率大大提高, 此时条件为Tue),并附加剪枝号.例如,可以将上 有着优越的过程性语义,在逻辑程序设计语言中仍 面的条形剪枝语句转换为如下commit剪枝语句: 有重要的意义 Partition([],_,]])True1, Partition([x I xs],y,[x I ls],bs) 4 Godel语言控制机制的算法设计与 ←{x≤y}_1∧Partition(xs,y, 实现 Is,bs), Partition([xI xs],y,ls,[x I bs]) 由上面所述知,Gdel语言中通过引人新的控 x>y1 Partition(xs,y,ls,bs). 制成分DELAY延迟机制和剪枝操作,完善了逻辑 Tue为系统关键字,即剪枝条件永远为真.因 程序设计语言的控制机构,可有效地提高系统的效 此,对于第1条子句只要合一成功即可剪除第2条 率.然而,由于实现难度较大,迄今为止,即使是语言 子句和第3条子句对应的搜索分枝, 的设计者们,也仅实现了一个旨在验证语言功能的 3.2 DELAY说明和剪枝的应用 原型系统,一些新的语言成分并没有实现.下面,对 如同Prolog中的cut一样,剪枝操作也有可能 Gdel语言控制机制的实现算法进行讨论,希望能 会剪去有效答案,但是,在Godel程序中可以通过设 够为该语言的完全实现建立一些方法和技术基础. 计一个好的DELAY说明来控制剪枝.一个重要的 Gdel语言的控制机制可概括为 启发就是DELAY说明应足够强,从而避免由于过 1)从左到右选取子目标进行判定.如子目标有 早地剪去一个不合适的树枝而导致无法预料的错 DELAY声明,先判断DELAY条件是否满足再决定 误.下面的Godel程序G3通过改进程序G1中的对 是否执行,若不满足,则先取下一个子目标; Delete的延迟声明有效地说明了这一点. 2)采用深度优先的方法对搜索树进行搜索、匹 PREDICATE Delete:a List(a )List(a ) 配和判定; DELAY Delete (x,[y I _],_UNTIL NONVAR 3)按程序中子句的顺序选取目标的可匹配项 (x)A NONVAR(y ) 进行匹配尝试和处理,当一个子目标匹配成功时,若 Delete (x,[xI y],y)+True2. 有剪枝操作,则不对与其剪枝号相同的其他可匹配 Delete(x,[ylz],[ylw])←-{x≠yi2 ADelete 项进行匹配尝试,即剪掉搜索树的部分分枝, (x,z,0)· Godel语言中的控制机制是Godel语言实现的 假设Delete的DELAY说明被删除了,现在来 关键部分之一.原理上,控制机制只是实现带有延迟 考察目标: 和剪枝的从左到右、深度优先、从上到下的匹配算 ←-Delete(x,[1,2,3],y)∧x=2 法,较为简单.但是,在实现一个真正实用的系统时, 目标中的第1个原子与Delete定义里的第1条 还得考虑各种因素,实现起来比较复杂s].G6del 语句的头部相匹配,因此,系统求得x=1并将剪掉 语言中的控制机制作为编译系统实现的一部分,其 其他的匹配语句,然而接下来调用1=2会导致目标 实现在技术上是将程序运行时的各种信息分为多栈 产生不可预料的错误. 存储(运行栈、环境栈、解除栈和延迟栈),以此来简 现在假设Delete调用已经根据程序中的Delete 化运行栈的控制,从而使控制机制获得较高的效率。 的延迟说明进行了延迟,从而先执行x=2,然后唤 借助前面实例分析的流程获得的思想,下面给出 醒x上的延迟调用Delete(2,[1,2,3],y),那么,目 Gdel语言控制机制的算法流程图(图1)」 标就能返回预期的结果.由此可见,Gdel语言中的
·350· 智能系统学报 第4卷 下 (c 系统初始化 平的 牛成当前子句(即问 题日标子句)的环境 合一处理 取当前子句的第一子 日标为当前子日标 合一成功否?> 当前子山标为空 N <是否尾递归? 取下一个子H标 为当前子日标 对当前子日标 返同处理 取下一个 进行延迟检在 匹配子句 可溯 <已得到解否 N r 史新当前子月标 检在通过否? 进运栈保存 是否岁史多解? 合一现场信总 B IN 业新当前子月标 取可匹 对引起延迟的 结束 子句 变量做标记, 并挂起子月标 的调用 图1Gdel语言控制机制的算法流程图 Fig.1 Outline of the control facility algorithm for Godel 流程图中各个模块的主要功能如下: 合一现场; 1)生成当前子句的环境模块:根据当前子句中 6)进入运行栈保存合一现场信息模块:将消解 的变量信息在环境栈中开设变量空间; 过程中的一系列合一现场信息,即在每一次合一成 2)返回处理模块:当一个子目标求解成功后, 功后,将表征合一现场的程序对象推人运行栈中.并 本模块则返回到该子目标的父节点,取下一子目标 在环境栈中保存合一时产生的变量置换信息,以便 进行求解.如果系统返回到问题目标节点(即消解 在回溯或返回时恢复合一前的现场.在子目标合一 树的根),则系统给出问题的求解结果一成功或 成功后,若将某一变量实例化了,而此变量曾使某一 失败,最后再询问是否要更多结果还是退出程序; 子目标的调用进程不满足DELAY说明被延迟挂 3)对当前子目标进行延迟检查模块:对当前子 起,那么这时要将此进程唤醒成为当前子目标,然后 目标进行延迟条件检查,如果不满足DELAY说明, 重新匹配 则挂起该子目标的调用直到条件满足,并对引起延 5结束语 迟的变量做标记保存在延迟栈中; 4)取可匹配子句模块:搜索与当前子目标匹配 本文研究的G6dl语言控制机制的算法已在研 的子句,在搜索之前必须检查该子目标的上一个尝 发的Godel语言编译雏形系统中得以实现23],同 试合一子句是否含有剪枝符号,如果有则函数在搜 时,通过计算可视化功能的实现和部分实例的测 索过程中不再考虑含有同一剪枝符号的程序子句, 试,验证了本文的算法具有很高的效率.然而, 以此达到剪枝的目的; 由于Gdl语言引入了许多新的语言成分,要做到 5)回潮模块:当前子目标如果与所有的可尝试 Cdel语言的完全实现,目前还有很多工作要做.其 合一子句均合一失败,则必须回溯,即回溯到上一次 中,变量的多态性、并行化是很重要的2个方面.变
第4期 高伟,等:G6del语言控制机制的研究与实现 .351 量的多态性可以参考面向对象程序设计的编译技术 programs[D].Xiamen:Xiamen University,2008. 尝试实现,需要建立动态类型系统,目前建立的动态 [9]李玲.Gdl语言编译系统中实现计算可视化[D].厦 类型系统还不能与推理机一起通过比较复杂的测试 门:厦门大学,2008. 实例.对于Gdel语言运行机制的并行化工作可以 LI Ling.Implementation of visual computing for the compil- 分为2个阶段,即首先实现单机多进程的运行,然后 er of programming language Godel[D].Xiamen:Xiamen U- niversity,2008. 实现多机联合运行.这将是本课题组下一步需要重 [10]涂序彦.广义智能系统的概念、模型和类谱[J].智能 点着手开展的工作, 系统学报,2006,1(2):7-10. 参考文献: TU Xuyan.Concept,model and kinds of generalized intelli- gent system[J].CAAI Transactions on Intelligent Sys- [1]HILLI P M,LLOYD J W.The Godel programming language tems,2006,1(2):7-10. [M].London:MIT Press,1994:79-99. [11]杨春燕,蔡文.可拓信息知识-智能形式化体系研究 [2]李松斌.Gdel语言编译系统中推理机的设计与实现 [J].智能系统学报,2007,2(3):811. [D].厦门:厦门大学,2007. YANG Chunyan,CAI Wen.A formalized system of exten- LI Songbin.Design and implementation of inference ma- sion information-knowledge-intelligence[J].CAAI Trans- chine for Godel compiler[D].Xiamen:Xiamen University, actions on Intelligent Systems,2007,2(3):8-11. 2007. 作者简介: [3]苏剑煌.C6del语言编译系统的设计与实现[D].厦门: 高伟,男,1985年生,硕士研究 厦门大学,2007. 生,主要研究方向为逻辑程序设计语言 SU Jianhuang.Design and implementation for the compiler of Gdel及其程序设计环境. programming language Godel[D].Xiamen:Xiamen Univer- sity,2007. [4]肖楠.具有并发延迟功能的PR0L0G语言控制策略的 设计与实现[J].小型微型计算机系统,1989,10(3):36- 43. 赵致琢,男,1957年生,教授,硕士 XIAO Nan.Design and implementation for the control facility 生导师,主要研究方向为计算模型与分 of Prolog languange with the functional of concurrent and de- 布式基础算法、逻辑程序设计语言、计 lay[J].Mini-Micro Systems,1989,10(3):36-43. 算机科学教育研究.先后获得2000年 [5]刘椿年,曹德和.PROL0G语言,它的应用与实现[M].北 福建省优秀教学成果奖一等奖、2001年 京:科学出版社,1990:10-23. 国家级优秀教学成果奖二等奖 [6]LLOYD J W.Foundation of logic programming[M].[S. 1.]Springer-Verlag,1984:5-15. 李惹琪,女,1973年生,博士研究 [7]HILL P M.The completion of typed logic programs and SLD- 生,主要研究方向为逻辑程序设计语言 NF resolution C]//Proceedings of the 4th International Gdel及其程序设计环境. Conference.[S.L.],1993:321-326. [8]王良霖.Gdel语言程序计算的可视化研究[D].厦门大 学,2008. WANG Lianglin.The study for the visualization of Godel