您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页prolog实验报告

prolog实验报告

来源:爱问旅游网
| |

| |

实 验 报 告

实验名称 PROLOG语言练习与编程上机实验 课程名称 人工智能及应用

专业班级: 学生姓名:罗 号: 成 绩:

指导教师: 实验日期:

(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm;字体:宋体小四号,1.25倍行距。) 验证性、综合性实验报告应含的主要内容:

一、实验目的及要求 二、所用仪器、设备 三、实验原理 四、实验方法与步骤 五、实验结果与数据处理

六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)

七、所附实验输出的结果或数据

设计性实验报告应含的主要内容:

一、设计要求 二、选择的方案 三、所用仪器、设备 四、实验方法与步骤 五、实验结果与数据处理 六、结论(依据“设计要求”) 七、所附实验输出的结果或数据

* 封面左侧印痕处装订

华 北 电 力 大 学 实 验 报 告

一、实验目的及要求 1、 熟悉并掌握trinic prolog的编程环境、prolog语言的回溯、递归技术和表处理技术; 2、 具体输入课堂上讲过的member(X,List)、append(L1,L2,L)和 findpairs等prolog程序 3、 运用prolog及其相关技术,编写并调试求解探宝、摆渡和梵塔问题的程序(三选二,摆渡问题必选)。要求实验报告中包括:程序及其注释和说明、console表单中的程序运行结果。 二、所用仪器、设备 PC台式机和trnic prolog编译软件 三、实验原理 1、 prolog本身自带推理机,其回溯、递归技术和表处理技术可简化复杂问题求解。 2、 trinic prolog的跟踪、设断点对于调试程序是非常有用的。 四、实验方法与步骤 1、 说明用实例如何观察并理解回溯机制 打开运行环境后,File>open>TextEdit,打开实例代码,然后点击compile按钮编译,编译成功后,在提问框中输入prolog命令,并将运行方式设为“trace off”,点击“prove”按钮执行,在下面的显示窗口即可看见回溯过程了。Prolog的回溯机制所遵循的4种基本原则,即自顶向下逐层搜索原则、从左到右循序扫描原则、规则匹配原则、事实匹配原则都可以从显示窗口看出来。Prolog开始为求解一个问题(或目标)寻找答案时,往往要在许多种可能情况中做出抉择。他首先在分支点(即回溯点)设置好标致,然后选择要追踪的第一个子目标。如果该子目标失败,prolog将会退到上一个回溯点尝试另一个目标。 2、 如何用断点、跟踪以及显示调试prolog程序 通过prolog运行环境打开示例代码后,如果你想在某句代码处设断点,就在该代码的左边空白栏单击鼠标左键即可,取消断点再单击一次。 第 页 共 页

华 北 电 力 大 学 实 验 报 告

五、求解的问题与程序 1.汉诺塔代码: hanoi(N):- move(N,left,middle,right),nl,nl. move(1,A,_,C):- inform(1,A,C),!. move(N,A,B,C):- N1 is N-1, move(N1,A,C,B), inform(N,A,C), move(N1,B,A,C). inform(N,Loc1,Loc2):- writelist(['Move disk', N, 'from', Loc1, 'to', Loc2]), nl. writelist([]). writelist([H|T]):- write(H), write(' '), writelist(T). 2.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). /* route(Room,WayOut,VisitedL0,VisitedL):- gallery(NextRoom,Room), avoid(DangousL), nomember(NextRoom,DangousL), nomember(NextRoom,VisitedL0), write(\"Current Room:\"), write(NextRoom),nl, route(NextRoom,WayOut,[NextRoom|VisitedL0],VisitedL). nomember(X,[]). nomember(X,[X|_]):-!,fail. nomember(X,[_|T]):- nomember(X,T). */ member(X,[X|_]). member(X,[_|T]):- member(X,T). reverse([],Y,Y). reverse([H|T],R0,R):- reverse(T,[H|R0],R). 3,摆渡问题代码: move(state(X,X,G,C),state(Y,Y,G,C)):- opp(X,Y), not(unsafe(state(Y,Y,G,C))), writelist([\"try famer takes wolf\move(state(X,W,X,C),state(Y,W,Y,C)):- opp(X,Y), not(unsafe(state(Y,W,Y,C))), writelist([\"try famer takes goat\move(state(X,W,G,X),state(Y,W,G,Y)):- opp(X,Y), not(unsafe(state(Y,W,G,Y))), writelist([\"try famer takes cabage\move(state(X,W,G,C),state(Y,W,G,C)):- opp(X,Y), not(unsafe(state(Y,W,G,C))), writelist([\"try famer takes self\第 页 共 页

华 北 电 力 大 学 实 验 报 告

move(state(F,W,G,C),_):- writelist([\"Backtrack track from:\ fail. path(Goal,Goal,Visitedl,Visitedl):-write(finished),nl,nl,nl. path(State,Goal, Beenstates,Tovisitedl):- move(State, Nextstate), nomember(Nextstate,Beenstates) , write(\"Nextstate is:\"), write(Nextstate),nl,nl, path(Nextstate,Goal,[Nextstate|Beenstates],Tovisitedl). opp(e,w). opp(w,e). unsafe(state(X,Y,Y,C)):-opp(X,Y). unsafe(state(X,W,Y,Y)):-opp(X,Y). go(Start,Goal):- path(Start,Goal,[Start],VisitedStates), reverse(VisitedStates,[],RVisitedL), write(\"Solution is:\"),nl, writelist(RVisitedL),nl,nl. reverse([],Y,Y). reverse([H|T],R0,R):- reverse(T,[H|R0],R). writelist([]):-nl,nl. writelist([H|T]):- write(H), write(' '), writelist(T). nomember(X,[]). nomember(X,[X|_]):-!,fail. nomember(X,[_|T]):- nomember(X,T). 六、讨论与结论(对prolog的求解过程、实验验证情况、实验中出现的问题和程序调试与运行情况等进行分析和讨论,提出对实验的进一步想法或改进意见) Prolog实验特别注重逻辑性,所以在做实验的时候要保持清醒的头脑。 本实验最大的难点还是在于逻辑程序设计,还有就是实验的工具不是完全支持标准的prolog语言,若能够用一个好点的运行环境来做实验,效率肯定会有很大的提高。 七、所附实验输出的结果或数据 1.汉诺塔: 输入命令 :-hanoi(5). 第 页 共 页

华 北 电 力 大 学 实 验 报 告

2.treasure_route: 输入命令 :-go(entry,exit). 运行结果: 3.摆渡问题: 输如命令: :-go(state(w,w,w,w),state(e,e,e,e)). 结果为: try famer takes goat e w e w Nextstate is:state(e, w, e, w) try famer takes goat w w w w try famer takes self w w e w Nextstate is:state(w, w, e, w) 第 页 共 页

华 北 电 力 大 学 实 验 报 告

try famer takes wolf e e e w Nextstate is:state(e, e, e, w) try famer takes wolf w w e w try famer takes goat w e w w Nextstate is:state(w, e, w, w) try famer takes goat e e e w try famer takes cabage e e w e Nextstate is:state(e, e, w, e) try famer takes wolf w w w e Nextstate is:state(w, w, w, e) try famer takes wolf e e w e try famer takes goat e w e e Nextstate is:state(e, w, e, e) try famer takes goat w w w e try famer takes cabage w w e w Backtrack track from: e w e e Backtrack track from: w w w e try famer takes cabage w e w w try famer takes self w e w e Nextstate is:state(w, e, w, e) try famer takes goat e e e e Nextstate is:state(e, e, e, e) 第 页 共 页

华 北 电 力 大 学 实 验 报 告

finished Solution is: state(w, w, w, w) state(e, w, e, w) state(w, w, e, w) state(e, e, e, w) state(w, e, w, w) state(e, e, w, e) state(w, e, w, e) state(e, e, e, e) 第 页 共 页

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务