prolog实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北电力大学
实验报告|
|
实验名称PROLOG语言编程练习及图搜索问题求解
课程名称人工智能及应用
专业班级:学生姓名:
学号:成绩:
指导教师:实验日期:2014年5月
(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm,右2.1cm;字体:宋体小四号,1.25倍行距。)
验证性、综合性实验报告应含的主要内容:
一、实验目的及要求
二、所用仪器、设备
三、实验原理
四、实验方法与步骤
五、实验结果与数据处理
六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)
七、所附实验输出的结果或数据
设计性实验报告应含的主要内容:
一、设计要求
二、选择的方案
三、所用仪器、设备
四、实验方法与步骤
五、实验结果与数据处理
六、结论(依据“设计要求”)
七、所附实验输出的结果或数据
一、实验目的及要求
1.熟悉PROLOG的运行环境,进行PROLOG的基本编程练习。
了解PROLOG语言中常量、变量的表示方法。PROLOG的简单程序结构,掌握分析问题、询问解释技巧;进行事实库、规则库的编写,并在此基础上进行简单的询问。
具体实验课上相关内容,练习example1到example6的内容。
2.图搜索问题求解。
任选以下实际应用题目:爱因斯坦的超级问题、字谜问题、汉诺塔问题、八数码问题、八皇后问题、农夫过河问题、传教士野人问题等,选两个。
要求实验报告中包括:程序分析、运行结果、实验收获、难点重点分析等。
二、所用仪器、设备
PC机和trinc prolog编译软件。
三、实验原理
PROLOG语言是一种以逻辑推理为基础的逻辑型程序设计语言,是一种陈述性语言而不是过程性语言。PROLOG语言能够自动实现模式匹配和回溯、具备递归技术,而且语法简明,可以简化复杂问题求解。
1、prolog本身自带推理机,其回溯、递归技术和表处理技术可简化复杂问题求解。
2、trinic prolog的跟踪、设断点对于调试程序是非常有用的。
四、实验方法与步骤
1、说明用实例如何观察并理解回溯机制
回溯机制所谓回溯,就是在程序运行期间,当某一个子目标不能满足(即谓词匹配失败)时,控制就返回到前一个已经满足的子目标(如果存在的话),并撤消其有关变量的约束值,然后再使其重新满足。成功后,再继续满足原子目标。如果失败的子目标前再无子目标,则控制就返回到该子目标的上一级目标(即该子目标谓词所在规则的头部)使它重新匹配。回溯是PROLOG的一个重要机制。
例如:农夫过河问题的move(...),其对应有四个子目标。当某个子目标不成立时,就会回溯到前一个子目标,撤销原约束值,然后重新合一。
2、如何用断点、跟踪以及显示调试prolog程序
将鼠标移动至语句之前单击便打入了断点。编译了以后,如果点“Prove”这个按钮,则
程序运行到断处。
点“Trace on”这个按钮便进入单步运行状态,即跟踪状态。点击“Start step”开始单步运行程序。
知道了如何单步运行与打断点,很容易就可以对prolog程序进行调试。
注:说明实验的操作过程。
五、求解的问题与程序
注:说明所选择实验题目,问题分析过程和程序难点分析等。
1.险洞探险问题:
Treasure-route代码:
go(Start,Goal):-
route(Start,Goal,[Start],VisitedL),
reverse(VisitedL,[],RVisitedL),
write("One route is:"),
write(RVisitedL),nl,nl,
fail.
go(_,_).
neighbor(X,Y):-
gallery(X,Y).
neighbor(X,Y):-
gallery(Y,X).
gallery(entry,fountain).
gallery(entry,monsters).
gallery(monsters,goldtreasure).
gallery(goldtreasure,food).
gallery(food,fountain).
gallery(goldtreasure,robbers).
gallery(goldtreasure,exit).
gallery(fountain,mermaid).
gallery(fountain,robbers).
gallery(mermaid,exit).
gallery(hell,fountain).
gallery(mermaid,goldtreasure).
avoid([monsters,hell,robbers]).
route(Room,Room,VisitedL,VisitedL):-
member(goldtreasure,VisitedL),!.
route(Room,WayOut,VisitedL0,VisitedL):-
neighbor(Room,NextRoom),
avoid(DangousL),
not(member(NextRoom,DangousL)),
not(member(NextRoom,VisitedL0)),
route(NextRoom,WayOut,[NextRoom|VisitedL0],VisitedL).