PROLOG实验报告
prolog实验报告小结

prolog实验报告小结Prolog实验报告小结在本次实验中,我们使用了Prolog编程语言来解决一系列逻辑推理和知识表示的问题。
Prolog是一种基于逻辑的编程语言,它使用逻辑规则和事实来进行推理和查询。
在本次实验中,我们学习了如何使用Prolog来表示知识,并使用它来解决一些经典的逻辑问题。
首先,我们学习了如何使用Prolog来表示事实和规则。
通过使用事实和规则,我们可以建立一个知识库,其中包含了我们关于世界的知识。
然后,我们可以使用这些知识来进行逻辑推理,找出答案或解决问题。
在实验中,我们还学习了如何使用Prolog来进行逻辑查询。
通过编写查询语句,我们可以向Prolog系统询问特定的问题,然后系统会使用已有的知识库来进行推理,并给出答案。
这种方式非常适合于解决逻辑问题,比如逻辑谜题或者逻辑推理问题。
此外,我们还学习了如何使用Prolog来实现递归。
递归是一种非常重要的编程技术,它可以帮助我们处理一些复杂的问题,比如树形结构或者列表操作。
在本次实验中,我们使用Prolog来实现了一些递归算法,比如计算阶乘或者斐波那契数列。
总的来说,本次实验让我们对Prolog编程语言有了更深入的了解。
通过实际操作,我们学会了如何使用Prolog来表示知识、进行逻辑推理和解决问题。
Prolog是一种非常强大的编程语言,它可以帮助我们解决许多复杂的逻辑问题,而且在人工智能领域也有着广泛的应用。
希望通过本次实验,同学们都能对Prolog有更深入的了解,并能够在以后的学习和工作中运用到这种强大的编程语言中。
prolog实验报告PROLOG语言编程练习及图搜索问题求解

华北电力大学
实验报告
|
|
实验名称PROLOG语言编程练习及图搜索问题求解
课程名称人工智能及应用
专业班级:学生姓名:
学号:成绩:
指导教师:实验日期:2014.5.28
(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm;字体:宋体小四号,1.25倍行距。
)
验证性、综合性实验报告应含的主要内容:
一、实验目的及要求
二、所用仪器、设备
三、实验原理
四、实验方法与步骤
五、实验结果与数据处理
六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)
七、所附实验输出的结果或数据
设计性实验报告应含的主要内容:
一、设计要求
二、选择的方案
三、所用仪器、设备
四、实验方法与步骤
五、实验结果与数据处理
六、结论(依据“设计要求”)
七、所附实验输出的结果或数据
* 封面左侧印痕处装订
1、字谜问题
结果输出
2、八皇后问题
结果输出
zebra.txt程序中,如何定义房间的位置关系?
答:next(A,B,[A,B,C,D,E])A的房间的下一个房间是B房间。
人工智能实验报告(梵塔问题)

实验准备(预 习程序)
PREDICATES hanoi(integer) move(integer,symbol,symbol,symbol) inform(symbol,symbol). CLAUSES hanoi(N):-move(N,a,b,c). move(1,A,_,C):-inform(A,C),!. move(N,A,B,C):-N1=N-1,move(N1,A,C,B), inform(A,C),move(N1,B,A,C). inform(Loc1,Loc2):-nl,write("移动 1 个盘子从柱" ,Loc1,"到 柱",Loc2). GOAL hanoi(4).
n 1
,n 为盘子的数目。最早提出这个问题的人设
定的盘子数目为 64,这就是说需要 2 641 =18446744073709551615 次 移动,假设计算机每秒钟能够计算 10,000,000(一千万)次,那也需 要 58494 年,所以千万不要试图使用此程序来解较大的数。 让我们来看看如何用递归来解决这个问题: 如果只有一个盘子,直接移过去就行了,这是递归的边界条件。 如果要移动 N 个盘子,就要分三步走: 1、把 N-1 个盘子移动到中间的杆子上(把右边的杆子作为临时 存放盘子的位置) 。 2、把最后一个盘子直接移到右边的杆子上。 3、最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子
实验报告
1.掌握 Visual Prolog 软件编程使用方法; 2.掌握 Prolog 程序的各域段含义; 3.进一步学习分析、运用递归方法解决问题。
实验目的
计算机、Visual Pro有盘子移到右边的杆子上。一次 只能移动一个盘子,你可以使用中间的杆子作为临时存放盘子的地 方。在移动的过程中,小盘子必须放在大盘子之上。给出完成上述操 作的过程。 提示:如果盘子只有两三个,是很容易解决的。但是随着盘子数 目的增加, 问题就变得非常难解了。 事实上, 已经通过数学证明过了, 实验内容 最少的移动次数是 2
北邮人工智能PROLOG实验报告

实验报告学院:计算机学院课程名称:人工智能原理实验名称:Prolog班级:姓名:学号:用PROLOG完成以下系统的编写。
給出代码和一个运行实例。
根据主要的燃烧材料,可把火灾归类。
把以下信息转换成规则,以决定火灾的类型。
A类火灾包括如纸、木和布等普通易燃物。
B类火灾包括易燃液体(如石油和石油气)、油脂和类似的物质。
C类火灾包括使用电力的电器。
D类火灾包括易燃的金属,如镁、钠、钾。
用来灭火的灭火器类型取决于火的类型。
把下面的信息转换成规则:A类火灾应该使用吸热或阻燃型灭火器灭火,如水或水类液体和无水化学品。
B类火灾应该通过隔绝空气、抑制易燃蒸汽的释放或终止易燃物的连锁反应来灭火。
灭火器包括无水化学品、二氧化碳、泡沫和含溴三氟甲烷。
C类火灾应该使用防短路的非导电媒质灭火。
如果可能的话,应切断电源。
灭火器包括无水化学品、二氧化碳和含溴三氟甲烷。
D类火灾应该使用焖熄法和不与燃烧金属发生反应的吸热化学品灭火。
这些化学品包括:三甲氧硼化物和涂有石墨的焦炭。
描述规则中所用的事实。
输出结果应显示可以使用何种灭火器以及应该采取的其他措施,如切断电源。
软件版本:Visual Prolog 5.2:源代码FireExtinguisher如下:predicatesFireA(symbol)FireB(symbol)FireC(symbol)Fired(symbol)Nondeterm treatment(symbol,symbol,symbol)clausesFireA(paper). /*纸*/FireA(wood). /*木*/FireA(cloth). /*布*/FireB(oil). /*石油*/FireB(oil_gas). /*石油气*/FireB(fat). /*油脂*/FireC(machine). /*电器*/FireD(magnesium). /*镁*/FireD(kalium). /*钾*/FireD(natrium). /*钠*/treatment(Material, " Heat absorbing or flame retardant type fire extinguisher \n" ," \n"):-FireA(Material).treatment(Material, "Water chemical, carbon dioxide, foam and bromine containing three fluorine methane fire extinguisher\n" ,"\n"):-FireB(Material).treatment(Material, " Anhydrous chemicals, carbon dioxide, foam and bromine containing three fluorine methane fire extinguisher \n" ," Cut off the power supply \n"):-FireC(Material).treatment(Material, " Trimethoxy boride and coated with graphite coke fire extinguisher \n" ," \n"):-FireD(Material).goaltreatment(machine,Whatkind,How).运行结果:。
Prolog编程练习 实验报告

武 夷 学 院实验报告数学与计算机系PROLOG编程练习一、目的要求进入实验机房,加深学生理解-逻辑程序运行的机理,如简单逻辑与、或、非的运算等;使学生掌握PROLOG语言(也可用数据库、C或C++语言中逻辑类指令来实现的语言)的特点、熟悉其编程环境,同时为后面人工智能程序设计做好准备。
二、实验内容在Turbo PROLOG 或 Visual Prolog 集成环境下调试运行简单的PROLOG程序,如描述亲属关系的PROLOG程序,或其它语言小型演绎数据库程序,等等。
具体要求:1.程序自选,但必须是描述某逻辑关系的小程序(也可用数据库指令或C或C++语言实现)。
2.跟综程序运行过程,理解逻辑程序特点(特别是逻辑值状态等)。
3.对原程序可做适当修改,以方便熟悉程序的编辑、编译和调试等过程。
4.示例程序(逻辑电路模拟程序),详见教材P295-296。
⑴逻辑“与”运算⑵逻辑“或”运算⑶逻辑“非”运算三、实验环境Windows 7 , dev c++四、实验步骤1.概述逻辑程序运行的机理答:逻辑程序设计将逻辑直接作为程序设计语言并将计算作为受控推理的一种程序设计技术。
这种将逻辑与控制分开的方法具有下列的优点:①可以在控制部分设计之前不断改进逻辑程序。
②可以改进控制部分而无需变动逻辑程序本身。
③可以从程序说明中生成逻辑程序,加以验证和变换,而无需考虑其控制部分。
④只需在逻辑程序中规定目标和实现这些目标的现有条件,也就是只需告诉系统做什么(What to do),至于如何执行也就是说怎样做(How to do),则由系统的控制部分,即解释程序处理解决。
2.写出逻辑程序语言特点及其编程环境(结合你所选择语言系统硬软件情况)# include <stdlib.h>IntMain(){Int a,b,c;c = a || b; /* 或,与,非*/c = a && b;c = !a;c = !b;}五、实验心得体会通过本次实验,我懂得了什么是逻辑编程语言,懂得了基本的逻辑关系,与逻辑的实现。
人工智能试验一认识prolog

数学与软件科学学院实验报告学期:___至___ 第 __ 学期年月日课程名称:___人工智能 ___ 专业: _级__ _班实验编号:01实验项目熟悉Prolog语言环境和程序编写方法指导教师__姓名:_ __ 学号: __实验成绩:_____一、实验目的及要求(1) 熟悉VIP(Visual Prolog 5.2)的安装、运行环境;(2)基本Prolog程序语言技术(包含表的创建、查找、分解、拼接等主要技术)。
二、实验内容(1) 安装VIP;(2) 熟悉VIP的基本环境(掌握一个Prolog语言程序或工程的构建方法、测试目标、代码浏览等基本操作方法);(3)了解和熟悉一个实际的Prolog程序文件的基本结构。
例如:DOMAINS/PREDICATES/CLAUSES/GOAL等;(4) 编写并执行简单的Prolog程序,并熟悉测试或调试的方法。
三、实验准备及设备准备好VIP安装源;复习有关Prolog语言的上课记录;按实验大纲要求事先编制几个简单的Prolog语言程序,并根据Prolog的执行特点分析其执行结果过程,预测其执行结果。
四、实验步骤和实验过程及实验结果(1)安装VIP软件环境,如果已安装好,可以跳过此步;(2) 熟悉Prolog语言环境;打开prolog应用程序图标,可以看到整个菜单有File, Edit, Project, Options, Window和Help六种功能。
其下面是浮动菜单条,最下面有消息窗口和提示信息窗口。
File子菜单:主要涉及有关文件的操作。
新建、打开、关闭/保存/另存为、打印操作。
Edit子菜单:进入编辑器进行相应的文本编辑操作。
Project子菜单:有关工程文件的菜单功能。
主要用于生成一个包含多个文件和资源的工程环境及相关参数设置。
Options子菜单:其包括Project和Global两项内容的选择设置。
Project主要是有关Project的目录、编译方式、代码生成方法和运行参数和执行文件的生成等方面。
prolog实验报告

华北电力大学实验报告||实验名称PROLOG语言编程练习及图搜索问题求解课程名称人工智能及应用专业班级:学生姓名:学号:成绩:指导教师:实验日期:2014年5月(实验报告如打印,纸张用A4,左装订;页边距:上下2.5cm,左2.9cm, 右2.1cm;字体:宋体小四号,1.25倍行距。
)验证性、综合性实验报告应含的主要内容:一、实验目的及要求二、所用仪器、设备三、实验原理四、实验方法与步骤五、实验结果与数据处理六、讨论与结论(对实验现象、实验故障及处理方法、实验中存在的问题等进行分析和讨论,对实验的进一步想法或改进意见)七、所附实验输出的结果或数据设计性实验报告应含的主要内容:一、设计要求二、选择的方案三、所用仪器、设备四、实验方法与步骤五、实验结果与数据处理六、结论(依据“设计要求”)七、所附实验输出的结果或数据reverse_writelist([H|T]):-reverse_writelist(T),write(H),nl.empty_stack([]).stack(Top,Stack,[Top|Stack]).reverse_print_stack(Stack):-empty_stack(Stack).reverse_print_stack(Stack):-stack(E,Rest,Stack),reverse_print_stack(Rest),write(E),nl.member(X,[X|T]).member(X,[_|T]):-member(X,T).member_stack(Element,Stack):-member(Element,Stack).go(Start,Goal):-empty_stack(Empty_been_stack),stack(Start, Empty_been_stack, Been_stack),path(Start, Goal, Been_stack).test:-go(state(w,w,w,w), state(e,e,e,e)).六、讨论与结论Prlolg的求解过程就是一个不断通过规则进行匹配,最后匹配到事实后回溯得出解的过程。
北邮大三下 人工智能 prolog作业2013 实验报告

作业:用PROLOG完成以下系统的编写。
給出代码和一个运行实例,指出某人吞入毒物后要采取什么措施。
已知下列毒物:酸(如去溴剂、碘酒)、碱(如氨水、漂白剂),以及石油产品(如汽油、松节油)。
其他所有毒物归为其他类型other类。
中毒时,应呼叫医师或中毒控制中心。
对于酸、碱和其他类型毒物,应该让病人喝水或牛奶之类的液体以稀释毒药。
对于其他类型的毒物,要呕吐。
但对于酸、碱或石油产品不能呕吐。
如果病人神志不清或惊厥,则不要喝水类液体,也不要呕吐。
*写出一个运行实例(输入、输出)。
源代码:predicatesacid(symbol)alkali(symbol)oil(symbol)other(symbol)patient_unaware(symbol)patient_aware(symbol)emergency_treatment(symbol,symbol,symbol)goalemergency_treatment(aware,bleach,What).clausesacid(take_bromine). /*去溴剂*/acid(iodine).alkali (ammonia_water).alkali(bleach).oil(gasoline).oil(turpentine).other(_).patient_unaware(unaware).patient_aware(aware).emergency_treatment(Patient,Drug,"can't drink"):-patient_unaware(Patient),other(Drug),fail. emergency_treatment(Patient,Drug,"can't vomit"):-patient_unaware(Patient),other(Drug).emergency_treatment(Patient,Drug,"can drink"):-patient_aware(Patient),acid (Drug),fail. emergency_treatment(Patient,Drug,"can't vomit"):-patient_aware(Patient),acid (Drug). emergency_treatment(Patient,Drug,"can drink"):-patient_aware(Patient),alkali (Drug),fail. emergency_treatment(Patient,Drug,"can't vomit"):-patient_aware(Patient),alkali (Drug). •emergency_treatment(Patient,Drug,"can't vomit"):-patient_aware(Patient),oil(Drug). emergency_treatment(Patient,Drug,"drink"):-patient_aware(Patient),other(Drug),fail. emergency_treatment(Patient,Drug,"vomit"):-patient_aware(Patient),other(Drug).运行实例:输入是emergency_treatment (aware,gasoline,What)输出是What=can't vomit1 Solution。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*******大学
实验报告|
|
实验名称PROLOG语言练习与编程上机实验
课程名称人工智能及应用
|
|
专业班级:*******学生姓名:******
学号:*******成绩:
指导教师:*******实验日期:
一、实验目的及要求
1、熟悉并掌握prolog的编程环境、prolog语言的回溯、递归技术和表处理技
术;
2、运用prolog及其相关技术,编写并调试求解农夫过河和模式搜索问题的程
序。
要求实验报告中包括:程序及其注释和说明、程序运行结果。
二、所用仪器、设备
PC台式机和prolog编译软件
三、实验原理
1、prolog本身自带推理机,其回溯、递归技术和表处理技术可简化复杂问
题求解。
2、prolog的跟踪、设断点对于调试程序是非常有用的。
四、求解的问题与程序
农夫过河问题
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, C1)|States],X).
legal_states(location(F,W,G,C),location(F,W,G,C),L,L).
write_state(location(X,W,G,C),location(Y,W,G,C)):-!,write("The farmer crosses the river himself"),nl.
write_state(location(X,X,G,C),location(Y,Y,G,C)):-!,write("The farmer crosses the river with the wolf"),nl.
write_state(location(X,W,X,C),location(Y,W,Y,C)):-!,write("The farmer crosses the river with the goat"),nl.
write_state(location(X,W,G,X),location(Y,W,G,Y)):-!,write("The farmer crosses the river with the cabbage"),nl.
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).
改进模式搜索算法
function pattern_search(current_goal)
Begin
If current_goal是closed中的成员
Then return FAIL
Else把current_goal加入到closed中;
While在数据库中还有供合一的事实或规则do
Begin
Case
Current_goal与事实合一:
return合一的置换集;
Current_goal包含非(—|P):
Begin
对P调用pattern_search;
If pattern_search返回FAIL
Then return{};
Else return FAIL;
End;
Current_goal是一个合取式(P1^P2^……^Pn):
Begin
For每个合取项do
Begin
对每个合取项调用pattern_search;
If pattern_search返回FAIL
Then return FAIL;
Else对其他的合取项应用置换;
End;
If对于所有的合取项,pattern_search都返回SUCCESS
Then return合一的复合;
Else return FAIL;
End;
Current_goal是一个析取式(P1VP2V……VPn):
Begin
Repeat每个析取项disjunct
对disjunct调用pattern_search;
Until不再有析取项或SUCCESS;
If pattern_search返回SUCCESS
Then return置换;
Else return FAIL;
End;
Current_goal与规则的结论合一(p在p<—q中):
Begin
对前提(q)应用目标的合一置换;
对前提调用pattern_search;
If pattern_search返回SUCCESS
Then return p和q的置换的复合;
Else return FAIL;
End;
End;%end case
End;%end while
Return FAIL;
End;
五、讨论与结论
Prolog语言是第一次接触。
在做实验时,我切切实实的感受到了自己的严重不足。
虽然能够看懂程序,但要自己动手写时一点思路都没有,不知从何处下手。
按着以前的学习的内容,本着把事实说清楚的思路,我调试了一个农夫过河的问题。
在这个过程中才发现其中的困难之处——逻辑性。
虽然把一些事实陈述清楚了,但仍然难以克服其中内在的逻辑关系,以至于在调试过程中出现了无限死循环这样的错误。
在最后调试农夫过河问题时,仍存在一些错误:只输出了一个结果,而且这个结果也并不是完全正确。
也许是接触prolog时间太短,还不能完全的掌握prolog语言的调试方法。
因此我还需要好好的学习prolog语言。