prolog实验报告
- 格式:pdf
- 大小:319.78 KB
- 文档页数:9
prolog实验报告小结Prolog实验报告小结在本次实验中,我们使用了Prolog编程语言来解决一系列逻辑推理和知识表示的问题。
Prolog是一种基于逻辑的编程语言,它使用逻辑规则和事实来进行推理和查询。
在本次实验中,我们学习了如何使用Prolog来表示知识,并使用它来解决一些经典的逻辑问题。
首先,我们学习了如何使用Prolog来表示事实和规则。
通过使用事实和规则,我们可以建立一个知识库,其中包含了我们关于世界的知识。
然后,我们可以使用这些知识来进行逻辑推理,找出答案或解决问题。
在实验中,我们还学习了如何使用Prolog来进行逻辑查询。
通过编写查询语句,我们可以向Prolog系统询问特定的问题,然后系统会使用已有的知识库来进行推理,并给出答案。
这种方式非常适合于解决逻辑问题,比如逻辑谜题或者逻辑推理问题。
此外,我们还学习了如何使用Prolog来实现递归。
递归是一种非常重要的编程技术,它可以帮助我们处理一些复杂的问题,比如树形结构或者列表操作。
在本次实验中,我们使用Prolog来实现了一些递归算法,比如计算阶乘或者斐波那契数列。
总的来说,本次实验让我们对Prolog编程语言有了更深入的了解。
通过实际操作,我们学会了如何使用Prolog来表示知识、进行逻辑推理和解决问题。
Prolog是一种非常强大的编程语言,它可以帮助我们解决许多复杂的逻辑问题,而且在人工智能领域也有着广泛的应用。
希望通过本次实验,同学们都能对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语言(也可用数据库、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;}五、实验心得体会通过本次实验,我懂得了什么是逻辑编程语言,懂得了基本的逻辑关系,与逻辑的实现。
数学与软件科学学院实验报告学期:___至___ 第 __ 学期年月日课程名称:___人工智能 ___ 专业: _级__ _班实验编号: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语言编程练习及图搜索问题求解课程名称人工智能及应用专业班级:学生姓名:学号:成绩:指导教师:实验日期: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完成以下系统的编写。
給出代码和一个运行实例,指出某人吞入毒物后要采取什么措施。
已知下列毒物:酸(如去溴剂、碘酒)、碱(如氨水、漂白剂),以及石油产品(如汽油、松节油)。
其他所有毒物归为其他类型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。
华北电力大学
实验报告
|
|
实验名称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房间。
天津农学院<<Prolog语言>>教学实习报告题目:动物识别系统学号 0908054113 姓名丁浩轩系别计算机科学与信息工程系专业班级软件工程1班指导教师马国强成绩评定2012年8月目录1 开发内容 (1)1.1 开发目标 (1)1.2 实习任务 (1)1.3 运行设备及环境 (1)1.4 实习主要步骤 (1)2 问题及算法 (1)2.1 问题的描述 (1)2.2 算法的一般思路 (2)2.3求解问题的算法描述 (3)2.4 算法实现的关键技巧 (4)3 运行结果与分析 (13)5 程序分析及结论 (14)1 开发内容1.1 开发目标(1)综合应用“知识表示”、“知识获取”、“知识利用”这三个人工智能技术的基本知识以及程序设计的相关知识。
(2)通过设计一个专家系统,并使用Prolog语言将其实现,加深对专家系统和Prolog语言的了解。
1.2 实习任务使用prolog编写一个动物识别的专家系统,并对其尽可能多地进行改进。
1.3 运行设备及环境PC机; prolog软件1.4 实习主要步骤根据任务目标,明确开发的具体任务;设计求解问题的流程图,并编写程序实现算法;2问题及算法2.1 问题的描述尽管专家系统有众多类型, 名称各异, 但基本原理框图一致, 如图 1 所示。
专家系统的核心是知识库和推理机, 其基本工作过程为: 系统根据知识库中的知识和用户提供的事实进行推理, 不断地由已知前提推出一些初步结论, 并将这些初步结论作为中间结果存放在数据库中, 然后将其作为新的已知事实进行下一步推理, 往复循环, 逐步逼近求解目标。
在这个过程中, 系统可以通过人机接口不断地与用户交流, 向用户提问, 或对用户提出的问题做出解释。
知识库是专家系统的知识存储器, 用来存放求解问题的领域知识( 包括事实性知识和启发性知识) 。
常见的知识表示法有: 一阶谓词逻辑表示法、产生式规则表示法、语义网络表示法、框架表示法、脚本表示法、过程表示法、状态图表示法、面向对象表示法以及一些不确定知识的表示方法等。
逻辑式程序语言实验报告目录一实验目的 (3)二实验要求 (3)三实验环境 (3)四实验过程 (3)1 目标:了解Prolog程序的基本结构。
(3)2 目标:了解Prolog的求解过程。
(5)3 用Prolog编程解决实际问题。
(7)四实验感想 (9)一实验目的1 通过实验理解逻辑式程序语言的基本概念和特征。
2 学习prolog程序编写和分析,熟悉prolog编程环境。
3 学会使用prolog解决一般逻辑问题。
二实验要求(1)在网上下载开源的PROLOG软件,并安装运行;(2)用PROLOG编写2~3道程序并上机验证通过;(3)提交实验报告,写出使用该语言的体会。
三实验环境windows7 32位操作系统编译器:SWI-Prolog编辑器:SWI-Prolog-Editor四实验过程1 目标:了解Prolog程序的基本结构。
根据下面的图形,求出a是谁的叔叔?代码如下:father(a,b).father(c,d).brother(a,c).uncle(X,Y):-brather(X,Z),father(Z,Y).使用SWI-Prolog-Editor编辑如下:在SWI-Prolog下编译,并且输入目标即可得到结果:我们可以看到图中,a是d的叔叔,所以求解正确。
在上面的代码中,1~3行是事实,即对图形关系的描述。
4行是规则,是对已知事实进行推理的依据。
最后在编译器端输入的是目标,是所要求解的问题。
2 目标:了解Prolog的求解过程。
如下图,求m和j都喜欢什么东西?代码如下:likes(m,f).likes(m,w).likes(j,w).likes(j,s).goallikes(m,X),likes(j,X).在编辑器中输入事实和规则:编译并且输入目标问题得到:分析:从图中知道,m和j确实共同喜欢的是w。
Prolog求解过程如下:(1)现在有两个问题:likes(m,X)和likes(j,X).(2)第一步:第一个问题likes(m,X)去与事实匹配,安顺寻得到{f/X}(也就是用f置换变量X)。
实验二:使用Prolog的一阶逻辑推理实验班级;智能1401姓名:蒙寿伟学号:201408070120一.实验目的1.学会使用Prolog语言;2.用Prolog语言巩固一阶逻辑知识;3.能够使用prolog语言实现一阶逻辑的证明;二、实验的硬件、软件平台硬件:计算机软件:操作系统:WINDOWS 10应用软件:Prolog三、实验内容及步骤熟悉prolog语言的使用并实现对于一阶逻辑推理的证明实验步骤:1:对于a,b,c,d四种输入情况,验证|?- p(a).的真假;a.p(b). p(a) :- p(b). p(a) :- p(c)推理分析:事实:p(b)为真.推理:由p(b)为真可以推出p(a)为真,由p(c)为真可以推出p(a)为真. 结论:p(a)为真.运行结果:b. p(c). p(a) :- p(b). p(a) :- p(c).推理分析:事实:p(c)为真.推理:由p(b)为真可以推出p(a)为真,由p(c)为真可以推出p(a)为真. 结论:p(a)为真.运行结果:c. p(b). p(a) :- p(b) ,p(c).推理分析:事实:p(b)为真.推理:由p(b)为真且p(c)为真可以推出p(a)为真.结论:p(a)为假.因为p(b)未知.d. p(c). p(a):- p(b) ; p(c).推理分析:事实:p(b)为真.推理:由p(b)为真或p(c)为真可以推出p(a)为真.结论:p(a)为真.2.验证?-friend(john,Y).likes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane ,smith).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).推理分析:1.如果X喜欢音乐,而且喜欢阅读,那么X是john的朋友。
华北电力大学实验报告||实验名称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)./*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).2.农夫过河问题: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',Y,Y,G,C]).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',Y,W,Y,C]).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',Y,W,G,Y]).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 himself',Y,W,G,C]).move(state(F,W,G,C),state(F,W,G,C)):-writelist(['BACKTRACK FROM',F,W,G,C])/*,fail*/.path(Goal,Goal,Been_stack):-write('Solution Path IS'),nl,reverse_print_stack(Been_stack).path(State,Goal,Been_stack):-move(State,Next_state),not(member_stack(Next_state,Been_stack)), stack(Next_state,Been_stack,New_been_stack),path(Next_state,Goal,New_been_stack). unsafe(state(X,Y,Y,C)):-opp(X,Y).unsafe(state(X,W,Y,Y)):-opp(X,Y).opp(e,w).opp(w,e).writelist([]).%writelist([]):-nl.writelist([H|T]):-write(H),nl,writelist(T).reverse_writelist([]).%reverse_writelist([[H|T]]):-reverse_writelist(T),write(H),nl.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的求解过程就是一个不断通过规则进行匹配,最后匹配到事实后回溯得出解的过程。
本次实验通过求解险洞探险问题与农夫过河问题,加深了一些对人工智能这门课的理解。
实验很成功地完成,收获很大。
七、所附实验输出的结果或数据1.险洞探险问题:2.农夫过河问题:八、实验问题解答查询有哪些端口?一开始使用Call端口进入目标,如果匹配成功就到了exit端口,如果失败就到了fail端口,如果用户输入回车,则又从redo端口进入目标每个端口的功能如下:call开始使用目标搜寻子句;exit目标匹配成功,在成功的子句上作记号,并绑定变量;redo试图重新满足目标,首先释放变量,并从上次的记号开始搜索;fail表示再找不到更多的满足目标的子句了。