人工智能技术导论-逻辑程序设计语言prolog

上传人:san****glu 文档编号:54809265 上传时间:2018-09-19 格式:PPT 页数:78 大小:208.50KB
返回 下载 相关 举报
人工智能技术导论-逻辑程序设计语言prolog_第1页
第1页 / 共78页
人工智能技术导论-逻辑程序设计语言prolog_第2页
第2页 / 共78页
人工智能技术导论-逻辑程序设计语言prolog_第3页
第3页 / 共78页
人工智能技术导论-逻辑程序设计语言prolog_第4页
第4页 / 共78页
人工智能技术导论-逻辑程序设计语言prolog_第5页
第5页 / 共78页
点击查看更多>>
资源描述

《人工智能技术导论-逻辑程序设计语言prolog》由会员分享,可在线阅读,更多相关《人工智能技术导论-逻辑程序设计语言prolog(78页珍藏版)》请在金锄头文库上搜索。

1、第 2 章 逻辑程序设计语言,2.1 基本PROLOG 2.2 Turbo PROLOG程序设计,PROLOG是Programming in Logic的缩写。它是由法国马塞大学于1972年研制,是一种逻辑型程序设计语言。在PROLOG程序中,一般只需告诉计算机“做什么”,而不需要告诉计算机“怎么做”。与通常过程性程序设计语言相比, PROLOG是更高级语言。,2.1 基本PROLOG,2.1.1 PROLOG的语句 PROLOG语言只有三种语句:事实、规则和问题。 1. 事实(fact) 格式 谓词名(项表).其中谓词名是以小写英文字母打头的字母、 数字、 下划线等组成的字符串, 项表是以逗

2、号隔开的项序列。 PROLOG中的项包括由常量或变量表示的简单对象以及函数、 结构和表等, 即事实的形式是一个原子谓词公式。,例如: student(john). like(mary,music). 就是PROLOG中的两个合法事实。 功能 一般表示对象的性质或关系。 例如上面的两个事实就分别表示“约翰是学生”和“玛丽喜欢音乐”。 ,作为特殊情形, 一个事实也可以只有谓词名而无参量。 例如: abc. repeat. 等也是允许的。,2. 规则(rule) 格式:谓词名(项表):-谓词名(项表),谓词名(项表).其中“:-”号表示“if”,其左部是规则的结论, 右部是规则的前提, 逗号表示an

3、d(逻辑与), 即规则的形式是一个逻辑蕴含式。 功能: 一般表示对象间的因果关系、 蕴含关系或对应关系。,例如: bird(X):-animal(X),has(X,feather). grandfather(X,Y):-father(X,Z),father(Z,Y). 就是PROLOG的合法规则。 作为特殊情形, 规则中的谓词也可以只有谓词名而无参量。 例如: run:-start,step1(X),step2(X),end. 也是一个合法规则。,3. 问题(question)格式 ?-谓词名(项表),谓词名(项表).例如: ? -student(john). ? -like(mary,X).

4、 就是两个合法的问题。 功能 问题表示用户的询问, 它就是程序运行的目标。 问题可以与规则及事实同时一起给出, 也可以在程序运行时临时给出。 ,2.1.2 PROLOG的程序PROLOG程序一般由一组事实、 规则和问题组成。 问题是程序执行的起点, 称为程序的目标。 例如下面就是一个PROLOG程序段。 likes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane,smith).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,s

5、ports),likes(X,music).?-friend(john,Y).,事实,规则,问题,可以看出, 这个程序中有四条事实、 两条规则和一个问题。 其中事实、规则和问题都分行书写。 规则和事实可连续排列在一起, 其顺序可随意安排, 但同一谓词名的事实或规则必须集中排列在一起。 问题不能与规则及事实排在一起, 它作为程序的目标要么单独列出, 要么在程序运行时临时给出。 ,PROLOG语言的文法结构相当简单,但描述能力很强。 例如, 当它的事实和规则描述的是某一学科的公理, 那么问题就是待证的命题; 当事实和规则描述的是某些数据和关系, 那么问题就是数据查询语句; 当事实和规则描述的是某初

6、始状态和状态变化规律, 那么问题就是目标状态。所以, PROLOG语言实际是一种应用相当广泛的智能程序设计语言。 同过程性语言相比, 一个PROLOG程序, 其问题就相当于主程序, 其规则就相当于子程序, 而其事实就相当于数据。,2.1.3 PROLOG程序的运行机理,1. 自由变量与约束变量 PROLOG中称无值的变量为自由变量, 有值的变量为约束变量。一个变量取了某值就说该变量约束于某值, 或者说该变量被某值所约束, 或者说该变量被某值实例化了。 在程序运行期间, 一个自由变量可以被实例化而成为约束变量, 反之, 一个约束变量也可被解除其值而成为自由变量。,2. 匹配合一两个谓词可匹配合一

7、, 是指两个谓词的名相同, 参量项的个数相同, 参量类型对应相同, 并且对应参量项还满足下列条件之一: (1) 如果两个都是常量, 则必须完全相同。 (2) 如果两个都是约束变量, 则两个约束值必须相同。 (3) 如果其中一个是常量, 一个是约束变量, 则约束值与常量必须相同。 (4) 至少有一个是自由变量。,例如: 下面的两个谓词 pre1(ob1,ob2,Z) pre1(ob1,X,Y)只有当变量X被约束为ob2, 且Y、 Z的约束值相同或者至少有一个是自由变量时, 它们才是匹配合一的。,PROLOG的匹配合一操作,可使两个能匹配的谓词合一起来, 即为参加匹配的自由变量和常量, 或者两个自

8、由变量建立一种对应关系, 使得常量作为对应变量的约束值, 使得两个对应的自由变量始终保持一致, 即若其中一个被某值约束, 则另一个也被同一值约束;反之, 若其中一个的值被解除, 则另一个的值也被解除。合一操作是PROLOG的一个特有机制。,3. 回溯所谓回溯, 就是在程序运行期间, 当某一个子目标不能满足(即谓词匹配失败)时,控制就返回到前一个已经满足的子目标(如果存在的话), 并撤消其有关变量的约束值, 然后再使其重新满足。 成功后, 再继续满足原子目标。如果失败的子目标前再无子目标, 则控制就返回到该子目标的上一级目标(即该子目标谓词所在规则的头部)使它重新匹配。回溯也是PROLOG的一个

9、重要机制。,2.2 Turbo PROLOG程序设计,2.2.1 程序结构一个完整的Turbo PROLOG(2.0版)程序一般包括常量段、 领域段、数据库段、谓词段、目标段和子句段等六个部分。各段以其相应的关键字 constants 、domains、database、 predicates、 goal和clauses开头加以标识。在程序的任何位置都可设置注解。 总之, 一个完整的Turbo PROLOG(2.0版)程序的结构如下:,/* 注 释 */ constants常量说明 domains域说明 database数据库说明 predicates谓词说明 goal目标语句 clauses

10、子句集,当然, 一个程序不一定要包括上述所有段, 但一个程序至少要有一个predicates段、clauses段和goal段。 如若省略goal段, 则可在程序运行时临时给出, 但这仅当在开发环境中运行程序时方可给出。若要生成一个独立的可执行文件, 则在程序中必须包含goal段。另一方面, 一个程序也只能有一个goal段。 ,例 如果把上节中的程序要作为Turbo PROLOG程序, 则应改写为:,/* 例P33-1 */ DOMAINSname=symbol PREDICATESlikes(name,name).friend(name,name),GOALfriend(john,Y), wr

11、ite(Y=, Y). CLAUSESlikes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane,smith).friend(john,X):-likes(X,sports),likes(X,music).friend(john,X):-likes(X,reading),likes(X,music).,领域段 该段说明程序谓词中所有参量项所属的领域。 领域的说明可能会出现多层说明, 直到最终说明到Turbo PROLOG的标准领域为止(如上例所示)。Turbo PROLOG的标准领域即标准数据类型, 包括整数、实数、符号

12、、串和符号等, 其具体说明如表2.1所示。,表 2.1 Turbo PROLOG的标准领域,谓词段 该段说明程序中用到的谓词的名和参量项的名(但Turbo PROLOG 的内部谓词无须说明)。 子句段 该段是Turbo PROLOG程序的核心, 程序中的所有事实和规则就放在这里, 系统在试图满足程序的目标时就对它们进行操作。 目标段 该段是放置程序目标的地方。 目标段可以只有一个目标谓词, 例如上面的例子中就只有一个目标谓词; 也可以含有多个目标谓词, 如 goal readint(X),Y=X+3,write(Y=,Y). 就有三个目标谓词。 这种目标称为复合目标。,2.2.2 数据与表达式

13、1. 领域1) 标准领域Turbo PROLOG中不定义变量的类型, 只说明谓词中各个项的取值域。 由上节我们知道, Turbo PROLOG有整数、实数、 字符、 串和符号等五种标准域。另外, 它还有结构、表和文件等三种复合域。,2) 结构结构也称复合对象, 它是Turbo PROLOG谓词中的一种特殊的参量项(类似于谓词逻辑中的函数)。 结构的一般形式为 函子(参量表)其中函子及参量的标识符与谓词相同。 注意, 这意味着结构中还可包含结构。 所以, 复合对象可表达树形数据结构。 例如下面的谓词 likes(Tom, sports(football, basketball, table_te

14、nnis). 中的 sports(football, basketball, table_tennis) 就是一个结构, 即复合对象。,3) 表表的一般形式是 x1, x2, , xn其中xi(i=1, 2, , n)为PROLOG的项, 一般要求同一个表的元素必须属于同一领域。不含任何元素的表称为空表, 记为 。 例如下面就是一些合法的表: 1, 2, 3 apple, orange, banana, grape, cane PROLOG,MAENS,PROGRAMMING,in logic ,表的最大特点是其元素个数可在程序运行期间动态变化。表的元素也可以是结构或表, 且这时其元素可以属于

15、不同领域。例如: name(LiMing), age(20), sex(male), address(xian) 1, 2, 3, 4, 5, 6, 7 都是合法的表。 后一个例子说明, 表也可以嵌套。,表的说明方法是在其组成元素的说明符后加一个星号*。 如: domains lists=string* predicates pl(lists) 就说明谓词pl中的项lists是一个由串string组成的表。,2. 常量与变量由上面的领域可知, Turbo PROLOG的常量有整数、实数、 字符、串、符号、结构、表和文件这八种数据类型。同理, Turbo PROLOG的变量也就有这八种取值。另外, 变量名要求必须是以大写字母或下划线开头的字母、数字和下划线序列, 或者只有一个下划线。 这后一种变量称为无名变量。,3. 算术表达式Turbo PROLOG提供了五种最基本的算术运算:加、减、 乘、除和取模, 相应运算符号为+、 -、*、 /、 mod。 这五种运算的顺序为: *、/、 mod优先于+、 -。 同级从左到右按顺序运算, 括号优先。 例如: 数学中的算术表达式 PROLOG中的算术表达式 x+yz X+Y*Zab-c/d A*B-C/Du mod v U mod V(表示求U除以V所得的余数),

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 经济/贸易/财会 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号