- 1、本文档共133页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3智能控制语言prolog简介
时间安排:待定。 地点:待定。 实验目的: 熟悉了解Turbo-Prolog的集成编程环境。 通过改错,或打开Prolog.err学习语法。 学会阅读程序,通过单步跟踪,验证理解程序。 简单的编程和调试。 实验内容和步骤: 阅读correct改错说明后,运行CORRECT.pro进行改错。 编辑自编的梵塔程序(起名HANO.pro),单步跟踪调试它。 记下最后显示结果与实验心得/建议,于下周交给班长。 阅读Hanoi梵塔程序说明后,运行Hanoi.pro 阅读Pair婚介配对程序说明后,运行Pair.pro Prolog入门之---11.实验 * * 实验中常用命令简介: 双击Prolog.exe可进入集成编程环境。 选Files/load装入源程序后,按Alt-R即可运行它。 (运行后)回到编辑,可按Alt-E 进入单步跟踪:可选命令 Options/compiler directives/Tace 再按Alt-R后,每按一次F10键(继续键),就只运行一条子句 了。将Tace改回off,则又回到全速运行状态了。 清除废信息,可选命令setup/load sys file后选prolog.sys Prolog入门之---11.实验 * * 举个例子,梵塔问题。这是一个非常古老的问题,在许多程序设计语言中都把它作为经典的递归例子来讲解,Prolog也不例外。 如上图,目的是把左边的所有盘子移到右边的杆子上。一次只能移动一个盘子,你可以使用中间的杆子作为临时存放盘子的地方。小盘子必须放在大盘子之上。问题看似不难。的确,如果盘子只有两三个,是很容易解决的。但是随着盘子数目的增加,问题就变得非常难解了。 Prolog入门之---11.实验 * * 事实上,已经通过数学证明过了,最少的移动次数是2^n-1(2^n表示n个2相乘),n为盘子的数目。最早提出这个问题的人设定的盘子数目为64,这就是说需要2^64-1= 18446744073709551615次移动,假设计算机每秒钟能够计算10,000,000(一千万)次,那也需要58494年,所以你千万不要试图使用此程序来解较大的数,否则后果自负。 如果只有一个盘子,直接移过去就行了,这是递归的边界条件。 如果要移动N个盘子,就要分三步走: 把N-1个盘子移动到中间的杆子上(把右边的杆子作为临时存放盘子的位置)。 把最后一个盘子直接移到右边的杆子上。 最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子作为临时存放盘子的位置)。 上面第一、三步用到了递归。我们看到,通过递归把N个盘子的问题变成了两个N-1个盘子的问题。如此下去,最后就变成了2^N-1个一个盘子的问题了,也就是说问题被解决了。 Prolog入门之---11.实验 * * 主程序如下: hanoi(N):- move(N,left,middle,right). move(1,A,_,C):- inform(A,C), !. move(N,A,B,C):- N1 is N-1, move(N1,A,C,B), inform(A,C), move(N1,B,A,C). inform(Loc1, Loc2): -nl, write(Move a disk from -Loc1- to -Loc2 ). 主程序为hanoi,它的参数为盘子的数目。它调用递归谓词move来完成任务。三个杆子的名字分别为left、middle、right。 第一个move子句是边界情况,即只有一个盘子时,直接调用inform显示移动盘子的方法。后面使用了截断。 第二个move子句为递归调用。 inform,把移动过程通过write谓词写出,由于write只能有一个参数,所以使用“-”操作符相连。 Prolog入门之---11.实验 * * 下面是N为4时的运行结果。 ?- hanoi(4). Move a disk from - left - to - middle Move a disk from - left - to - right Move a disk from - middle - to - right Move a disk from - left - to - middle Move a disk from - right - to - left Move a disk from - right - to - middle Move a disk from - left - to - middle Move a disk from - left - to - right Move a disk from - middle - to - right Move a disk fro
文档评论(0)