prolog实验报告

更新时间:2024-05-09 12:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

华北电力大学

实 验 报 告

| |

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

| |

专业班级: 软件0802 学生姓名:龚泽滢

学 号: 200809020205 成 绩:

指导教师:朱永利 实验日期: 11.03

(实验报告如打印,纸张用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、 说明用实例如何观察并理解回溯机制 2、 如何用断点、跟踪以及显示调试prolog程序 五、求解的问题与程序 汉诺塔问题: /*程序的入口 N代表几个盘子*/ hanoi(N):-move(N,left,middle,right),nl,nl. /*递归出口,当盘子只有一个时从A杆移动到C杆,调用cut停止回溯*/ move(1,A,_,C):- inform(1,A,C),!. move(N,A,B,C):- N1 is N-1, move(N1,A,C,B), /*通过递归调用n-1个盘子重A杆通过C杆移动到B杆第 页 共 页

华 北 电 力 大 学 实 验 报 告

*/ inform(N,A,C), /*将将A杆的最后一个盘子移动到C杆上*/ move(N1,B,A,C). /*将B杆上的N-1个盘子,通过A杆移动到C杆上*/ inform(N,Loc1,Loc2):- writelist(['Move disk', N, 'from', Loc1, 'to', Loc2]), nl. writelist([]). writelist([H|T]):- write(H), write(' '), writelist(T). 农夫过河问题 opposite(s,n). opposite(n,s). safe_goat(X,_,X,_). safe_cabbage(X,_,_,X). safe_goat(F,X,Y,_):-opposite(X,Y). safe_cabbage(F,_,X,Y):-opposite(X,Y). is_peaceful(F,W,G,C):-safe_goat(F,W,G,C),safe_cabbage(F,W,G,C). transform(location(X,W,G,C),location(Y,W,G,C)):-opposite(X,Y). transform(location(X,X,G,C),location(Y,Y,G,C)):-opposite(X,Y). transform(location(X,W,X,C),location(Y,W,Y,C)):-opposite(X,Y). transform(location(X,W,G,X),location(Y,W,G,Y)):-opposite(X,Y). member(X,[X|_]). member(X,[_|T]):-member(X,T). legal_states(location(F0,W0,G0,C0),location(F,W,G,C),States,X):- transform(location(F0,W0,G0,C0),location(F1,W1,G1,C1)), is_peaceful(F1,W1,G1,C1), not(member(location(F1,W1,G1,C1),States)),!, legal_states(location(F1,W1,G1,C1),location(F,W,G,C),[location(F1,W1,G1, legal_states(location(F,W,G,C),location(F,W,G,C),L,L). 第 页 共 页

C1)|States],X). 华 北 电 力 大 学 实 验 报 告

write_state(location(X,W,G,C),location(Y,W,G,C)):-!,write(\farmer crosses the river himself\ write_state(location(X,X,G,C),location(Y,Y,G,C)):-!,write(\farmer crosses the river with the wolf\ write_state(location(X,W,X,C),location(Y,W,Y,C)):-!,write(\farmer crosses the river with the goat\ write_state(location(X,W,G,X),location(Y,W,G,Y)):-!,write(\farmer crosses the river with the cabbage\ write_actions([]). write_actions([H1,H2|T]):-write_state(H1,H2),write_actions([H2|T]). boat(location(F0,W0,G0,C0),location(F,W,G,C)):- legal_states(location(F0,W0,G0,C0),location(F,W,G,C),[location(F0,W0,G0,C0)],X),write_actions(X). 六、讨论与结论(对prolog的求解过程、实验验证情况、实验中出现的问题和程序调试与运行情况等进行分析和讨论,提出对实验的进一步想法或改进意见) Prolog语言虽然已经不是第一次接触,但以前仅仅停留在能够看懂程序的地步。在做实验时,我切切实实的感受到了自己的严重不足。虽然能够看懂程序,但要自己动手写时一点思路都没有,不知从何处下手。 按着以前的学习的内容,本着把事实说清楚的思路,我写了一个农夫过河的问题。在写的过程中才发现其中的困难之处——逻辑性。 虽然把一些事实陈述清楚了,但仍然难以克服其中内在的逻辑关系,以至于在调试过程中出现了无限死循环这样的错误。 在最后调试农夫过河问题时,仍存在一些错误:只输出了一个结果,而且这个结果也并不是完全正确。也许是接触prolog时间太短,还不能完全的掌握prolog语言的调试方法。因此我还需要好好的学习prolog语言。 对于prolog语言的回溯机制,虽然有了一定的理解,但还是远远的不够。面对一些简单的问题,还能理解其中的含义,但是对于复杂的问题,我依然感到束手无策。所以我还需要加强对prolog语言机制的理解。 七、所附实验输出的结果或数据 运行结果 第 页 共 页

本文来源:https://www.bwwdw.com/article/fbag.html

Top