人工智能程序设计语言-2015课件_第1页
人工智能程序设计语言-2015课件_第2页
人工智能程序设计语言-2015课件_第3页
人工智能程序设计语言-2015课件_第4页
人工智能程序设计语言-2015课件_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2022-1-191人工智能程序设计语言人工智能程序设计语言华北电力大学计算机系华北电力大学计算机系 2022-1-19华北电力大学华北电力大学2内容内容 综述 函数型程序设计语言LISP 逻辑性程序设计语言PROLOG PROLOG程序设计2022-1-19华北电力大学华北电力大学3内容内容 综述 函数型程序设计语言LISP 逻辑性程序设计语言PROLOG PROLOG程序设计2022-1-19华北电力大学华北电力大学4综述综述 人工智能所解决的问题 并非一般的数值计算或数据处理问题 是要实现对脑功能的模拟和再现 人工智能程序 面向问题 面向逻辑 支持知识表示 能描述逻辑关系和抽象概念 处理

2、对象更多的是知识,或者说是符号 常规程序设计语言受限2022-1-19华北电力大学华北电力大学5综述综述 人工智能程序设计语言 函数型语言 逻辑性语言 面向对象语言 混合型语言2022-1-19华北电力大学华北电力大学6综述综述-函数型语言函数型语言 函数型语言 LISP是一种函数型程序设计语言。LISP程序由一组函数组成,程序的执行过程就是一系列的函数调用和求值过程。但LISP还不是纯函数型语言,准确地讲,它是基于-函数的语言。除LISP外,20世纪70年代J.Backus还提出了一种称为FP的所谓纯函数型程序设计语言。但该语言现在还限于理论研究,实现上还存在一定困难。2022-1-19华北

3、电力大学华北电力大学7综述综述-逻辑型语言逻辑型语言 逻辑型语言 逻辑型程序设计语言起源于PROLOG (PROgramming in LOGic)。 PROLOG语言首先由法国马塞大学的Colmerauer和它的研究小组于1972年研制成功,后来在欧洲得到进一步发展。特别是1981年日本宣布要以PROLOG作为他们正在研制的新一代计算机智能计算机的核心语言,更使PROLOG举世瞩目,迅速风靡世界。2022-1-19华北电力大学华北电力大学8综述综述-逻辑型语言逻辑型语言 现在PROLOG几乎在人工智能的所有领域都获得了应用, 成为与LISP并驾齐驱的甚至更加流行的智能程序设计语言。 由于PR

4、OLOG语言是一种逻辑型程序设计语言, 因此用它编写的程序也就是逻辑程序,即在PROLOG程序中一般不需告诉计算机“怎么做”, 而只需告诉它“做什么”。因此,PROLOG亦属陈述性语言。与通常的过程性程序设计语言相比, PROLOG是更高级的语言。2022-1-19华北电力大学华北电力大学9综述综述-面向对象语言面向对象语言 面向对象语言面向对象语言 20世纪80年代以来,面向对象程序设计(ObjectOrientedProgramming,简称OOP)异军突起,发展迅速。OOP以其信息隐蔽、封装、继承、多态、消息传递等一系列优良机制,大大改善了软件的复杂性、模块性、重用性和可维护性,有望从根

5、本上解决软件的生产效率问题。另一方面,由于面向对象程序设计的类、对象、继承等概念,与人工智能特别是知识表示和知识库产生了天然的联系。 2022-1-19华北电力大学华北电力大学10综述综述-混合型语言混合型语言 混合型语言混合型语言 1. 函数型与逻辑型相结合的语言函数型与逻辑型相结合的语言 函数型与逻辑型语言的结合方式有耦合型和统一型两类。 统一型又可分为具有归结语义的函数型语言和集成式语言两个子类。 耦合型语言意为将具有归约语义的函数型语言和具有归结语义的逻辑型语言组合在一起, 并在二者之间提供一个接口而形成的一种混合型语言。 其典型代表有: 2022-1-19华北电力大学华北电力大学11

6、综述综述-混合型语言混合型语言 (1) LOGLISP。该语言在LISP的基础上增加了表达合一、 回溯等机制的系统函数,从而在保持LISP特色的同时又有了逻辑程序设计能力。 (2) FUNLOG。该语言在 PROLOG 之外又增加了函数定义机制, 系统以归结语义执行PROLOG程序, 以归约语义求解函数。 (3) POPLOG。这是POP-11、PROLOG和LISP的混合型语言, 三种成分各有一个增量式编译器。具有归结语义的函数型语言又可分为N-语言、F-语言和R语言。2022-1-19华北电力大学华北电力大学12综述综述-混合型语言混合型语言2. 函数型与面向对象相结合的语言函数型与面向对

7、象相结合的语言 在LISP语言的基础上再扩充面向对象机制而产生的语言, 称为函数型的面向对象程序设计语言(亦称为面向对象的LISP)。 这种语言现已成为一个家族, 其中比较著名的有: (1) Flavors 由 MIT 的 Lisp Machine 小组于 1979 年研制而成, 它的基语言是Symbolics Common LISP。 (2)LOOPS(Lisp-Object-OrientedProgramming System )。它是在InterLisp-D环境上实现的基于LISP的OOP语言, 由Xerox公司于1983年推出。 2022-1-19华北电力大学华北电力大学13综述综述-

8、混合型语言混合型语言 (3) CommonLoops。 它是基于CommonLisp的函数型OOP语言, 由Xerox公司于1985 年推出。 (4) CLOS (CommonLisp Objetc System)。它是Xerox公司于1986 年推出的一个CommonLoops与New Flavors的后继产品。 (5) CommonObjects。它是由HP公司于19831985年实现的又一个基于CommonLisp 的OOP语言。 (6) OBJ2 也是一种面向对象的函数型语言。 2022-1-19华北电力大学华北电力大学14综述综述-混合型语言混合型语言3. 逻辑型与面向对象相结合的语

9、言逻辑型与面向对象相结合的语言 这类语言著名的有: (1) SPOOL。日本IBM分部于1985年推出的以面向对象思想扩充的PROLOG语言。 (2) Orient 84K。Keio大学于1984年发表的基于PROLOG和Smalltalk 的并行执行语言。 (3) Vulan。 一种面向对象的逻辑型语言。2022-1-19华北电力大学华北电力大学15内容内容 综述 函数型程序设计语言LISP 逻辑性程序设计语言PROLOG PROLOG程序设计2022-1-19华北电力大学华北电力大学16函数型程序设计语言函数型程序设计语言LISP LISP是第一个人工智能程序设计语言 LISt Proce

10、ssing,表处理语言 1960年由MIT的麦卡锡和他的研究小组设计,擅长表处理,即符号处理 许多人工智能系统用LISP语言编写 LISP被誉为人工智能的数学,是人工智能研究和开发的主要工具2022-1-19华北电力大学华北电力大学17函数型程序设计语言函数型程序设计语言LISP LISP语言的主要特点: LISP程序由一组函数组成,程序的执行过程是函数的调用过程 程序和数据在形式上是相同的,即都是符号表达式,简称为S表达式 递归是LISP语言的主要控制结构 程序以交互方式运行2022-1-19华北电力大学华北电力大学18LISP的程序结构的程序结构LISP的程序一般由函数的定义和函数的调用两

11、部分组成。其一般格式为: (DEFUN() () () () () ()“DEFUN”是定义函数的关键字“函数名”可以是系统的内部函数(名), 也可以是用户用DEFUN定义的函数(名)2022-1-19华北电力大学华北电力大学19一个一个LISP程序程序(DEFUN HANOI (a b c n) (COND (= n 1) (MOVE-DISK a c) (T (HANOI a c b (- n 1) (MOVE-DISK a c) (HANOI b a c (- n 1) (DEFUN MOVE-DISK(from to) (TERPRI) (PRINC Move Disk From) (

12、PRINC from) (PRINC To) (PRINC to) (HANOI abc 3) 两个函数前者调用后者函数调用部分只有一个函数调用2022-1-19华北电力大学华北电力大学20LISP的基本函数的基本函数 LISP的函数一律使用前缀表示方式,分为内部函数(基本或系统函数)和用户自定义函数两类 基本函数的种类有十多个,仅给出主要的几类 表处理函数 算数函数 求值与赋值函数 谓词函数 条件函数2022-1-19华北电力大学华北电力大学21表处理函数表处理函数 表处理是LISP的主要特色,下面仅给出最常用的几个:1) CAR函数功能取出表中的表头。如CAR(LISP Language

13、Program)返回值 LISP2) CDR函数 功能 取出表中的表尾 如 (CDR(LISP Language Program) 返回值 (Language Program)2022-1-19华北电力大学华北电力大学22表处理函数表处理函数3) CONS函数 功能 将S表达式作为表头加到表中去 如 (CONSMy(LISP Language Program) 返回值 (My LISP Language Program)4) APPEND函数功能 将n个表中的元素合并成一个新表如(APPEND(TIGER LION)(DOG CAT)返回值 (TIGER LION DOG CAT)5) LIS

14、T函数功能把n个S表达式作为元素构成一张新表如(LISTYELLOWREDBLUE)返回值 (YELLOW RED BLUE) 2022-1-19华北电力大学华北电力大学23算术函数算术函数 LISP的算术表达式也是用函数表示的,称为算术函数 举例说明 (+2 5)表示2+5,返回值为7 (-(*4 8)(/10 5)表示48-10/5,返回值为302022-1-19华北电力大学华北电力大学24求值与赋值函数求值与赋值函数 撇号 是禁止求值函数QUOTE的简写形式 赋值函数有多个 SET函数是最基本的一个功能把S表达式赋给变量例如: (SETX8); X 得到值8 (SETY(a b c);

15、Y 得到值(a b c) (SETZ(CDRY); Z 得到值(b c)2022-1-19华北电力大学华北电力大学25谓词函数谓词函数 返回值为逻辑值真或假的函数称为谓词函数 真和假分别用T和NIL表示 谓词函数也有多个,仅给出常用的几个:(1) 原子谓词ATOM 功能检测其参数是否为原子,是则T,否则NIL 例如: (ATOMa);返回T (ATOM(a b);返回NIL 2022-1-19华北电力大学华北电力大学26谓词函数谓词函数 (2) 相等谓词EQUAL 功能判断两个参数是否逻辑相等 例如: (EQUALaa); 返回T (EQUAL(a b)(a c); 返回NIL (3)判空表函

16、数NULL 功能判断参数是否为空表,是则返回T,否则返回NIL2022-1-19华北电力大学华北电力大学27条件函数条件函数 条件函数类似于分支语句,其作用是控制程序的流程 格式 (COND(P1 e1) (P2 e2) (Pn en) 其中Pi(i=1,.,n)为谓词,ei(i=1,.,n)为一个或多个S表达式 功能功能如果P1为真,则COND函数的值为e1。否则,判断P2,直到某个Pi真为止,然后将对应的ei作为函数值。若没有一个Pi的值为非NIL,则COND的返回值为NIL。特别地,Pi也可以为逻辑常量T,这时则对其对应的各表达式求值,并把最后一个表达式的值作为COND的返回值 2022

17、-1-19华北电力大学华北电力大学28条件函数条件函数例如: (COND(NULL x)0) (ATOM x)1) (LISTP x)(LENGTH x) 其语义是,若x的值为NIL,则COND的返回值为0;若x为原子,则COND的返回值为1;若x的值为表,则COND的返回值为表的长度2022-1-19华北电力大学华北电力大学29自定义函数自定义函数 自定义函数的格式为: (DEFUN() ) 其中函数体,又可能是用户自定义的函数或LISP基本函数的某种组合2022-1-19华北电力大学华北电力大学30例例 定义求定义求N!的的LISP函数函数阶乘的公式是 n!n(n-1)! 1!1 0!1其

18、LISP函数如下: (DEFUNN!(n) (COND(=n 0)1) (=n 1)1) (T(* n(N!(- n 1)该函数的最后一行中又调用了它自己这个函数N!是递归定义的2022-1-19华北电力大学华北电力大学31例例 HANOI(DEFUN HANOI(a b c n)当只有一个盘子时,直接将a上的盘子移动到c上(COND(n 1)(MOVEDISK a c)其他情况,通过递归,先将柱a上的n1个盘子通过柱c移到柱b上(T(HANOI a c b( n 1)再将柱a上的一个盘子移动到柱c上(MOVEDISK a c)最后再通过递归,将柱b上的n1个盘子通过柱a移动到柱c上 (HAN

19、OI b a c( n 1)函数MOVE-DISK起显示的作用,表示从柱from到柱to移动了一个盘子(DEFUN MOVEDISK(from to)TERPRI是回车换行函数,PRINC是显示参数的函数(TERPRI)(PRINC”Move Disk From”)(PRINC from)(PRINC”To”)(PRINC to)2022-1-19华北电力大学华北电力大学32内容内容 综述 函数型程序设计语言LISP 逻辑性程序设计语言PROLOG PROLOG程序设计2022-1-19华北电力大学华北电力大学33逻辑型程序设计语言逻辑型程序设计语言PROLOG 1972年,法国马赛大学的Al

20、ain. Colmerauer提出了Prolog的雏型 1975年,Prolog被用于问题求解系统,此后在许多领域获得了应用,如关系数据库、定理证明、智能问题求解、计算机辅助设计、规划生成等领域 Prolog语言是以一阶谓词逻辑的Horn 子句集为语法,以Robinson的消解原理为工具,加上深度优先的控制策略而形成的人工智能通用程序设计语言2022-1-19华北电力大学华北电力大学34Horn逻辑逻辑 文字文字:原子公式(正文字)或原子公式的否定(负文字)P, Q, R 子句子句:若干文字的析取 PQR 在数理逻辑中,霍恩子句(Horn Clause)是带有最多一个肯定文字的子句(文字的析取

21、) Horn子句子句:子句L1L2 Ln中如果至多只含一个正文字,那么该子句称为Horn子句。Horn子句P Q1 Q2 Qn通常表示为:P Q1, Q2, , Qn2022-1-19华北电力大学华北电力大学35Horn逻辑逻辑 Horn子句的类型:子句的类型: 过程:P Q1, Q2, , Qn 事实: P 目标: Q1, Q2, , Qn 空子句: 2022-1-19华北电力大学华北电力大学36Horn逻辑逻辑例例: 过程:AT(dog, x) AT(Zhang, x) 事实:AT(Zhang, train) 目标: AT(dog, train) 首先目标中过程调用AT(dog, trai

22、n)与过程名AT(dog, x)匹配,合一为train/x,调用过程AT(Zhang, x),从而产生新目标 AT(Zhang, train),与事实匹配,产生目标 。因而调用成功,输出“是”。2022-1-19华北电力大学华北电力大学37Prolog的基本特点的基本特点 Prolog既是一种逻辑程序设计语言,又是一个逻辑系统 Prolog是一种描述性语言,是一种面向问题的语言,只需要告诉它要做什么,即给出问题的形式描述,而不需要知道应该如何做 Prolog完全依靠匹配、回溯来进行搜索 Prolog有很强的描述能力2022-1-19华北电力大学华北电力大学38内容内容 综述 函数型程序设计语言

23、LISP 逻辑性程序设计语言PROLOG PROLOG程序设计 PROLOG语句 PROLOG程序 PROLOG程序的运行机理 其它2022-1-19华北电力大学华北电力大学39PROLOG的语句的语句 PROLOG语言只有三种语句,分别为: 事实(fact) 规则(rule) 问题(question) 2022-1-19华北电力大学华北电力大学40事实事实(fact)格式格式 (). 谓词名是以小写英文字母打头的字母、数字、下划线等组成的字符串 项表是以逗号隔开的项序列 例如:student(john). like( mary ,music).功能功能 一般表示对象的性质或关系一般表示对象的

24、性质或关系 作为特殊情形,事实也可以只有谓词名而无参量 例如:abc. repeat.2022-1-19华北电力大学华北电力大学41规则规则(rule)格式格式 ():-(),(). “:-”号表示“if” 左部的谓词是规则的结论(亦称为头) 右部的谓词是规则的前提(亦称为体) 表示零次或多次重复 逗号表示and(逻辑与)例如:bird(X):-animal(X),has(X,feather). grandfather(X,Y):-father(X,Z),father(Z,Y).功能功能 一般表示对象间的因果关系、蕴含关系或对应关系一般表示对象间的因果关系、蕴含关系或对应关系 作为特殊情形,规

25、则中的谓词也可以只有谓词名而无参量例如:run:-start,step1(X),step2(X),end.2022-1-19华北电力大学华北电力大学42问题问题(question) 格式格式 ?-(),(). 例如: ?-student(john). ?-like(mary,X). 功能功能 问题表示用户的询问,是程序运行的目标问题表示用户的询问,是程序运行的目标2022-1-19华北电力大学华北电力大学43Prolog的一些内建谓词的一些内建谓词 Prolog提供了一些有用的内建谓词(Built-in Predicates) 内建谓词和用户定义谓词使用方式类似 常用内建谓词 等价谓词: =

26、永真和永假: true; fail 载入程序文件: consult/1 终端输出 write/1; nl/02022-1-19华北电力大学华北电力大学44PROLOG程序程序 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(

27、X,sports),likes(X,music). ?-friend(john,Y).四条事实两条规则一个问题2022-1-19华北电力大学华北电力大学45PROLOG程序的运行机理程序的运行机理 PROLOG程序的运行是从目标出发,并不断进行匹配、合一、归结,有时还要回溯,直到目标被完全满足或不能满足时为止 匹配? 合一? 回溯?2022-1-19华北电力大学华北电力大学46PROLOG程序的运行机理程序的运行机理 自由变量与约束变量自由变量与约束变量 PROLOG中称无值的变量为自由变量,有值的变量为约束变量 一个变量取了某值就说该变量约束于某值 或者说该变量被某值所约束 或者说该变量被某

28、值实例化了2022-1-19华北电力大学华北电力大学47PROLOG程序的运行机理程序的运行机理 匹配合一匹配合一:指两个谓词的名相同,参量项的个数相同,参量类型对应相同,并且对应参量项满足下列条件之一 (1)如果两个都是常量,则必须完全相同(2)如果两个都是约束变量,则两个约束值必须相同(3)如果其中一个是常量,一个是约束变量,则约束值与常量必须相同(4)至少有一个是自由变量例如:下面的两个谓词 pre1(“ob1”,“ob2”,Z). pre1(ob1,X,Y). 只有当变量X被约束为ob2,且Y、Z的约束值相同或者至少有一个是自由变量时,它们才是匹配合一的2022-1-19华北电力大学华

29、北电力大学48PROLOG程序的运行机理程序的运行机理 回溯回溯 在程序运行期间,当某一个子目标不能满足(即谓词匹配失败)时,控制就返回到前一个已经满足的子目标(如果存在的话),并撤消其有关变量的约束值,然后再使其重新满足。成功后,再继续满足原子目标。如果失败的子目标前再无子目标,则控制就返回到该子目标的上一级目标(即该子目标谓词所在规则的头部)使它重新匹配。回溯也是PROLOG的一个重要机制2022-1-19华北电力大学华北电力大学49 设所给的询问是 ?-friend(john,Y).(john和谁是朋友?) 则求解目标为 friend(john,Y). 这时,系统对程序进行扫描,寻找能与

30、目标谓词匹配合一的事实或规则头部。显然,程序中前面的四条事实均不能与目标匹配,而第五个语句的左端即规则PROLOG程序的运行过程程序的运行过程2022-1-19华北电力大学华北电力大学50 friend(john,X):-likes(X,reading),likes(X,music). 头部可与目标谓词匹配合一。但由于这个语句又是一个规则,所以其结论要成立则必须其前提全部成立。于是,对原目标的求解就转化为对新目标 likes(X,reading),likes(X,music). 的求解。这实际是经归结,规则头部被消去,而目标子句变为 ?-likes(X,reading),likes(X,mus

31、ic). 现在依次对子目标 likes(X,reading)和likes(X,music) 求解PROLOG程序的运行过程程序的运行过程2022-1-19华北电力大学华北电力大学51 子目标的求解过程与主目标完全一样,也是从头对程序进行扫描,不断进行测试和匹配合一等,直到匹配成功或扫描完整个程序为止。可以看出,对第一个子目标like(X,reading)的求解因无可匹配的事实和规则而立即失败,进而导致规则 friend(john,X):-likes(X,reading),likes(X,music).的整体失败。于是,刚才的子目标 likes(X,reading)和likes(X,music)

32、 PROLOG程序的运行过程程序的运行过程2022-1-19华北电力大学华北电力大学52 被撤消,系统又回溯到原目标friend(john,X) 这时,系统从该目标刚才的匹配语句处(即第五句)向下继续扫描程序中的子句,试图重新使原目标匹配,结果发现第六条语句的左部,即规则 friend(john,X):-likes(X,sports),likes(X,music). 的头部可与目标为谓词匹配。但由于这个语句又是一个规则,于是,这时对原目标的求解,就又转化为依次对子目标 likes(X,sports)和likes(X,music)PROLOG程序的运行过程程序的运行过程2022-1-19华北电力

33、大学华北电力大学53 的求解。这次子目标likes(X,sports)与程序中的事实立即匹配成功,且变量X被约束为bell。于是,系统便接着求解第二个子目标。由于变量X已被约束,所以这时第二个子目标实际上已变成了 likes(bell,music). 由于程序中不存在事实likes(bell,music),所以该目标的求解失败。于是,系统就放弃这个子目标,并使变量X恢复为自由变量,然后回溯到第一个子目标,重新对它进行求解。由于系统已经记住了刚才已同第一子目标谓词匹配过的事实的位置,所以重新求解时,便从下一个事实开始测试。 PROLOG程序的运行过程程序的运行过程2022-1-19华北电力大学华

34、北电力大学54 易见,当测试到程序中第三个事实时,第一个子目标便求解成功,且变量X被约束为mary。这样,第二个子目标也就变成了 likes(mary,music). 再对它进行求解。这次很快成功。 由于两个子目标都求解成功,所以,原目标friend(john,Y)也成功,且变量Y被约束为mary(由Y与X的合一关系)。于是,系统回答: Y=mary 程序运行结束。 上面只给出了问题的一个解。如果需要和可能的话,系统还可把john的所有朋友都找出来。我们把上述程序的运行过程再用示意图描述如下:PROLOG程序的运行过程程序的运行过程2022-1-19华北电力大学华北电力大学55图 PROLOG

35、程序运行机理示例 PROLOG程序的运行过程程序的运行过程2022-1-19华北电力大学华北电力大学56循环循环 Prolog可以实现计数循环。例:student(1,张三,90.2).student(2,李四,96.5).student(3,王五,96.4).print:-student(Number,Name,Score),write(Number),write(Name),write(Score),nl,Number=3.print2:-student(Number,Name,Score),write(Number),write(Name),write(Score),nl,Number=

36、2. Prolog可以实现不计数循环(Do循环)print1:-student(Number,Name,Score),write(Number),write(Name),write(Score),nl,fail.2022-1-19华北电力大学华北电力大学57表处理与递归表处理与递归 表是有若干元素的有序序列,表中元素也可以为表 PROLOG中采用一对方括号 把表元素括起来,每个元素间用逗号或空格分开,例如: m,n,d,f 在PROLOG内引入“”符号,如H|T表示一个以H为首,以T为尾的表 例如表m,n,d,f中,表头为m表尾为n,d,fapple,orange,banana apple o

37、range,bananaa,b,c,d,e a,b c,d,e prolog prolog 无定义 无定义 2022-1-19华北电力大学华北电力大学58表处理与递归表处理与递归 例:设计一个能判断对象X是表L的成员成员的程序 分析:(1)如果X与L的表头是同一个对象,则X是L的成员 (2)如果X是L的表尾的成员,则X是L的成员 程序:member(X,X|Tail).member(X,Head|Tail):-member(X,Tail).2022-1-19华北电力大学华北电力大学59表处理与递归表处理与递归 表的拼接拼接程序,即把两个表连接成一个表 append(,L,L). append(

38、H|T,L2,H|Tn):-append(T,L2,Tn). 例: :- ?-append(1,2,3,4,5,1,2,3,4,5). yes:- ?-append(1,2,3,4,5,1,2,3,4,5,6). no2022-1-19华北电力大学华北电力大学60表处理与递归表处理与递归 表的输出输出print().print(H|T):-write(H),print(T). ?-print(3|4,5,6,7). ?-print(1,2,3).2022-1-19华北电力大学华北电力大学61表处理与递归表处理与递归 例:表的倒置倒置reverse(,).reverse(H|T,L):-reverse(T,L1),append(L1,H,L).:- ?-reverse(1,2,3,X).X=3,2,12022-1-19华北电力大学华北电力大学62截断截断 直到目前为止,我们都一直在使用Prolog内建的回溯功能。使用此功能可以方便地写出结构紧凑的谓词来 但是,并不是所有的回溯都是必须的,这时我们需要能够人工地控制回溯过程 Prolog提供了完成此功能的谓词,叫做cut,使用符号!来表示,如果在cut处产生回溯,它会自动地失败,而不去进行其它的选择

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论