在prolog中实现问题求解

合集下载

prolog实验报告小结

prolog实验报告小结

prolog实验报告小结Prolog实验报告小结在本次实验中,我们使用了Prolog编程语言来解决一系列逻辑推理和知识表示的问题。

Prolog是一种基于逻辑的编程语言,它使用逻辑规则和事实来进行推理和查询。

在本次实验中,我们学习了如何使用Prolog来表示知识,并使用它来解决一些经典的逻辑问题。

首先,我们学习了如何使用Prolog来表示事实和规则。

通过使用事实和规则,我们可以建立一个知识库,其中包含了我们关于世界的知识。

然后,我们可以使用这些知识来进行逻辑推理,找出答案或解决问题。

在实验中,我们还学习了如何使用Prolog来进行逻辑查询。

通过编写查询语句,我们可以向Prolog系统询问特定的问题,然后系统会使用已有的知识库来进行推理,并给出答案。

这种方式非常适合于解决逻辑问题,比如逻辑谜题或者逻辑推理问题。

此外,我们还学习了如何使用Prolog来实现递归。

递归是一种非常重要的编程技术,它可以帮助我们处理一些复杂的问题,比如树形结构或者列表操作。

在本次实验中,我们使用Prolog来实现了一些递归算法,比如计算阶乘或者斐波那契数列。

总的来说,本次实验让我们对Prolog编程语言有了更深入的了解。

通过实际操作,我们学会了如何使用Prolog来表示知识、进行逻辑推理和解决问题。

Prolog是一种非常强大的编程语言,它可以帮助我们解决许多复杂的逻辑问题,而且在人工智能领域也有着广泛的应用。

希望通过本次实验,同学们都能对Prolog有更深入的了解,并能够在以后的学习和工作中运用到这种强大的编程语言中。

逻辑型程序设计语言PROLOG详细教程

逻辑型程序设计语言PROLOG详细教程

逻辑型程序设计语⾔PROLOG详细教程逻辑型程序设计语⾔PROLOG教程2.3. 1逻辑型程序设计语⾔PROLOGPROLOG的语句PROLOG语⾔只有三种语句,分别称为事实、规则和问题。

1.事实(fact)格式: <谓词名>(<项表>).功能⼀般表⽰对象的性质或关系。

其中谓词名是以⼩写英⽂字母打头的字母、数字、下划线等组成的字符串,项表是以逗号隔开的项序列。

例如:student(john).like( mary ,music).表⽰“约翰是学⽣”和“玛丽喜欢⾳乐”。

2. 规则(rule)格式:<谓词名>(<项表>):-<谓词名>(<项表>){,<谓词名>(<项表>)}.功能: ⼀般表⽰对象间的因果关系、蕴含关系或对应关系。

其中“:-”号表⽰“if”(也可以直接写为if),其左部的谓词是规则的结论(亦称为头),右部的谓词是规则的前提(亦称为体),{}表⽰零次或多次重复,逗号表⽰and(逻辑与),即规则的形式是⼀个逻辑蕴含式。

例如:bird(X):-animal(X),has(X,feather).grandfather(X,Y):-father(X,Z),father(Z,Y).第⼀条规则表⽰“如果X是动物,并且X有⽻⽑,则X是鸟”;第⼆条规则就表⽰“X 是Y的祖⽗,如果存在Z,X是Z的⽗亲并且Z⼜是Y的⽗亲”。

3.问题(question)格式: ?-<谓词名>(<项表>){,<谓词名>(<项表>)}.功能表⽰⽤户的询问,它就是程序运⾏的⽬标。

例如:-student(john).-like(mary,X).2.3. 2 PROLOG程序PROLOG程序⼀般由⼀组事实、规则和问题组成。

问题是程序执⾏的起点,称为程序的⽬标。

例如下⾯就是⼀个PROLOG程序。

4.prolog 与visual prolog

4.prolog 与visual prolog

?_parent(tom,X), ?_parent(X,Y).
jim
以上程序说明的几个重要观点: (1)在Prolog中定义一个关系是容易的,可以通过满足关系的n个对象来表达。 (2)对程序中已定义的关系,用户可以轻而易举地询问Prolog 系统。 (3)关系的对象可以是常量 (如:tom,ann) ,也可以是变量(如:X,Y)。 (4)向系统提出问题,可由一个或多个目标组成。 (5)一个Prolog 程序由一些子句(clauses)组成。每个子句用句号结束。 (6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。在肯定 回答的情况下,说相应的目标是可满足的,而且这个目标成功了。否则,说目标不 可满足,目标失败了。
一个Turbo Prolog程序通常包括5个部分。如下:
1.域说明部分,说明谓词对象的数据类型。 /* 注释 */ domains 域说明 database 数据库说明 predicates 谓词说明 goal 目标说明 clauses 子句说明 /* 注释 */ 2.数据库说明部分,包含一些数据库谓词的定义, 是说明用于动态数据库管理的谓词。如果程序不 需要动态数据库,该部分可省略。 3.谓词说明部分,定义程序中除内部谓词以外的 所有谓词。
Prolog 有三种形式的语句: 1. B:- A1,A2,…,An . 含义是 A1 A2... An B ,相当于~A1~A2… ~An B。可视作人工智能 系统中的推理规则。也可将该句看作一个过程,B为过程头,是过程名,而 {A1,A2,…,An }为过程体。 2. A1,A2,…,An . 含义是 A1 A2 ... An F ,相当于~A1~A2… ~An,可视作推理的目 标,或称目标子句。 3. B. 含义是公式B无条件地为真。可视作已知的事实。

prolog语言简介

prolog语言简介

例:
自动实现的搜索算法之二——回溯 回溯
clauses likes(tom,talk). /*1*/ likes(bill,swim). /*2*/ likes(bill,talk). /*3*/ friend(john,X):-likes(X,talk),likes(X,swim) /*4*/ 设Goal:friend(john,Who)
可以回溯 如果加入 cut p:- q1,q2,!,r1,r2. p:- s1,s2. 逻辑关系变为 P1 if (if q1∧ q2 then r1 ∧r2 else s1 ∧s2 ) then p q1 q2 ! r1 回溯
P P2 P r2 s1 s2
截断 回溯
影响回溯的手段之二——cut 影响回溯的手段之二
影响回溯的手段之二——cut (截 影响回溯的手段之二
断)
cut—无条件成功,并截断回溯
(也可以用! 表示)
影响回溯的手段之二——cut 影响回溯的手段之二
例:p:- q1,q2,r1,r2. p:- s1,s2. 逻辑关系是 if q1∧ q2∧r1 ∧r2 or s1 ∧s2 P P1 then p q1 q2 r1 r2 s1 s2 P2 P
影响回溯的手段之二——cut 影响回溯的手段之二
应改为 legal(X):- super_speed(X),!,fail. legal(X):- drunk_drive(X),!,fail. legal(X).
常识:“外Goal” 和“程序内goal” 有“勤” “懒” 之分
显然,此结果不完备
Press the SPACE bar
影响回溯的手段之一——fail 影响回溯的手段之一
fail—无条件失败,引起回溯

人工智能 用PROLOG语言完成8数码问题的程序

人工智能    用PROLOG语言完成8数码问题的程序

数学与软件科学学院实验报告学期:至第学期年月日课程名称:_人工智能及其应用专业:班级:级班实验编号:实验项目:用Prolog语言完成8数码问题的程序指导教师:姓名:学号:实验成绩:实验四用Prolog语言完成8数码问题的程序实验目的:在实验三的基础上,进一步熟悉运用Prolog语言进行问题描述的编程方法。

实验内容:进一步熟悉Prolog的基本技术;编写并实现8数码问题的程序描述。

实验准备:熟悉已使用过的Prolog技术;编写8数码问题的Prolog程序。

实验步骤:(1)熟悉8数码问题的目标及Prolog中要用到的相关技术;(2)编写完整的Prolog程序代码;程序:DOMAINSlist=integer*number=integerPREDICATESrule(list,list),!,member(number,list).empty_stack(list).stack(number,number,list).member_stack(number,number).reverse_print_stack(number).path(number,number,number).CLAUSESrule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X2,X1,X0,X3,X4,X5,X6,X7,X8]):-X0=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X4,X1,X2,X3,X0,X5,X6,X7,X8]):-X0=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X6,X1,X2,X3,X4,X5,X0,X7,X8]):-X0=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X8,X1,X2,X3,X4,X5,X6,X7,X0]):-X0=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X2,X1,X3,X4,X5,X6,X7,X8]):-X1=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X8,X2,X3,X4,X5,X6,X7,X1]):-X1=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X2,X1,X3,X4,X5,X6,X7,X8]):-X2=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X3,X2,X4,X5,X6,X7,X8]):-X2=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X2,X1,X0,X3,X4,X5,X6,X7,X8]):-X2=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X3,X2,X4,X5,X6,X7,X8]):-X3=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X4,X3,X5,X6,X7,X8]):-X3=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X4,X3,X5,X6,X7,X8]):-X4=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X4,X1,X2,X3,X0,X5,X6,X7,X8]):-X4=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X5,X4,X6,X7,X8]):-X4=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X5,X4,X6,X7,X8]):-X5=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X4,X6,X5,X7,X8]):-X5=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X6,X1,X2,X3,X4,X5,X0,X7,X8]):-X6=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X4,X6,X5,X7,X8]):-X6=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X4,X5,X7,X6,X8]):-X6=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X4,X5,X7,X6,X8]):-X7=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X4,X5,X6,X8,X7]):-X7=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X8,X2,X3,X4,X5,X6,X7,X1]):-X8=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X8,X1,X2,X3,X4,X5,X6,X7,X0]):-X8=0.rule([X0,X1,X2,X3,X4,X5,X6,X7,X8],[X0,X1,X2,X3,X4,X5,X6,X8,X7]):-X8=0.member(X,[X|T]).member(X,[H|T]):-member(X,T).empty_stack([]).stack(Top,Stack,[Top|Stack]).member_stack(Element,Stack):-member(Element,Stack).reverse_print_stack(Stack):-empty_stack(Stack).reverse_print_stack(Stack):-stack(E,Rest,Stack),reverse_print_sta ck(Rest),write(E),nl.path(Goal,Goal,Been_stack):-write('Solutionis'),nl,reverse_print_stack(Been_stack).path(State,Goal,Been_stack):-rule(State,Next_state),not(member_st ack(Next_state,Been_stack)),stack(Next_state,Been_stack,New_been_stac k),path(Next_state,Goal,New_been_stack);GOALgo([0,1,2,3,4,5,6,7,8],[2,0,1,3,4,5,6,7,8]).(3)输入并跟踪调试该程序;(4)书写实验报告(附实验结果及分析)。

第六章 PROLOG语言习题解答

第六章 PROLOG语言习题解答

第六章PROLOG语言6.3答:(1)目标不成功(2)目标不成功(3)目标成功,x,y,z被例化为x1,y1,z1(4)目标不成功(5)目标不成功6.4答:poglog规则Is_mother(x):_mother(x,y)Is_father(x):_father(x,y)Is_son(x):_father(y,x),male(x)Grandpa(x,y):_father(x,y1),father(y1,y)Sibling(x,y):_diff(x,y),mother(z1,x),mother(z1,y),father(z2,x), father(z2,y),parent(x,y)6.5答:(1)family1.cl文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ class family1open corepredicatesclassInfo : core::classInfo.% @short Class information predicate.% @detail This predicate represents information predicate of this class.% @endpredicatesrun : core::runnable.end class family1(2)family1.pack文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ #include @"family1.ph"% privately used packages#include @"pfc\filesystem\filesystem.ph"#include @"pfc\application\exe\exe.ph"#include @"pfc\console\console.ph"#include @"pfc\exception\exception.ph"% private interfaces% private classes% implementations#include @"family1.pro"(3)family1.ph文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ #requires @"family1.pack"% publicly used packages#include @"pfc\core.ph"% exported interfaces% exported classes#include @"family1.cl"(4) family1.prj6文件头:/*****************************************************************************Copyright (c) Sabu Francis Associates******************************************************************************/ implement family1open coreconstantsclassName = "family1".classV ersion = "$JustDate: $$Revision: $".clausesclassInfo(className, classVersion).domainsgender = female(); male().class facts - familyDBperson : (string Name, gender Gender).parent : (string Person, string Parent).class predicatesfather : (string Person, string Father) nondeterm anyflow.clausesfather(Person, Father) :-parent(Person, Father),person(Father, male()).class predicatesgrandFather : (string Person, string GrandFather) nondeterm (o,o).clausesgrandFather(Person, GrandFather) :-parent(Persoicates)文件尾:reconsult : (string FileName).clausesreconsult(FileName) :-retractFactDB(familyDB),file::consult(FileName, familyDB).clausesrun():-console::init(),stdIO::write("Load data\n"),reconsult("..\\fa.txt"),stdIO::write("\nfather test\n"),father(X, Y),stdIO::writef("% is the father of %\n", Y, X),fail.run():-stdIO::write("\ngrandFather test\n"),grandFather(X, Y),stdIO::writef("% is the grandfather of %\n", Y, X),fail.run():-stdIO::write("\nancestor of Pam test\n"),X = "Pam",ancestor(X, Y),stdIO::writef("% is the ancestor of %\n", Y, X),fail.run():-stdIO::write("End of test\n").end implement family1goalmainExe::run(family1::run).(5)family1.pro补充习题:1.编写一Prolog程序使得你能和计算机“交谈”(Conversations with a computer)。

PROLOG程序设计

PROLOG程序设计
事实用来说明一个问题中已知的对象和它们之间 的关系。 Prolog程序中 程序中, 的关系。在Prolog程序中,事实由谓词名及用括号 括起来的一个或几个对象组成。 括起来的一个或几个对象组成。谓词和对象可由用 户自己定义。 户自己定义。 例如,谓词likes(bill,book). 例如,谓词likes(bill, likes(bill 是一个名为like的关系,表示对象bill和 是一个名为like的关系,表示对象bill和book like的关系 bill 之间有喜欢的关系。 之间有喜欢的关系。 travels(zhangming,beijing). 张明到北京旅行。 张明到北京旅行。
适合的领域 专家系统、规划和其他AI相关问题的求解, AI相关问题的求解 专家系统、规划和其他AI相关问题的求解, 是智能程序设计语言中具有代表性且应用较多 的一种语言。 的一种语言。 自然语言理解、机器定理证明等方面。 自然语言理解、机器定理证明等方面。 和其它语言一样, 和其它语言一样,可以轻松地开发出各种 应用,包括数据库和WEB应用。 应用,包括数据库和WEB应用。 WEB应用
2、规则:从给出的事件推断出的凭据
规则由几个互相有依赖性的简单句(谓词)组成, 规则由几个互相有依赖性的简单句(谓词)组成, 用来描述事实之间的依赖关系。从形式上看, 用来描述事实之间的依赖关系。从形式上看,规则 由左边表示结论的后件谓词和右边表示条件的前提 谓词组成。 谓词组成。 例如,规则 例如, bird(X):bird(X):-animal(X),has(X,feather). 表示凡是动物并且有羽毛,那么它就是鸟。 表示凡是动物并且有羽毛,那么它就是鸟。 travels(liying,X):travels(liying,X):- travels(zhangming,X). 表示张明到哪里旅行,李英就到那里旅行。 表示张明到哪里旅行,李英就到那里旅行。

prolog实验报告

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的求解过程就是一个不断通过规则进行匹配,最后匹配到事实后回溯得出解的过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在prolog中实现问题求解
prolog是把逻辑思维用文字描述出来的计算机语言
完整的prolog程序是有事实和规则组成的。

事实用来储存一些数据,而规则用来储存某种可以推理出来的关系。

找物品的prolog程序(我自己编写)如下:
Predicates /定义谓词/
in(string,string) /定义事实语句/
ques(string,string) /定义规则语句/
Clauses /prolog专属子句/
in(desk,office). /陈述书桌在办公室里/
in(bag,desk). /陈述书包在书桌里/
in(pencil_box,bag). /陈述文具盒在书包里/
in(pencil, pencil_box). /陈述铅笔在文具盒里/
ques(X,Y):-in(X,Y) /如果X在Y里,那么问题即是真/
ques(X,Y):-in(X,Z),ques(Z,Y) /如果X在Z里,Z在Y里,那么问题即是真/
/一定要注意X、Y、Z是大写,表示是变量/
——因为此问题我足足在电脑前调试程序一小时才运行成功
如果把上面的程序在prolog编译环境中运行,只需要在goal:输入问题即可,
(本想将运行窗口贴在此,但是没找到)
例如
goal:ques(pencil,bag)系统给出答案yes
goal:ques(bag,office)系统给出答案yes
goal:ques(basketball,office)系统给出答案no
运送物资与上述程序段及其类似;
汉诺塔问题(网上搜索得到的程序段)
hanoi(N):-move(N,left,centre,right) move(0,_,_,_,):-! .
move(N,A,B,C):- M is N-1, move(M,A,C,B),inform(A,B),move(M,C,B,A) inform(X,Y):-write([move,a,disc,from,the,X, pole,to,the,Y,pole]),n1.。

相关文档
最新文档