实验一 Prolog语言编程练习
- 格式:doc
- 大小:30.50 KB
- 文档页数:2
实验1: Prolog语言程序设计人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。
能够用它来编写求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。
Prolog是当代最有影响的人工智能语言之一,由于该语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用,已经成为人工智能应用领域的强有力的开发语言。
尽管Prolog语言有许多版本,但它们的核心部分都是一样的。
Prolog的基本语句仅有三种,即事实、规则和目标三种类型的语句,且都用谓词表示,因而程序逻辑性强,方法简捷,清晰易懂。
另一方面,Prolog是陈述性语言,一旦给它提交必要的事实和规则之后,Prolog就使用内部的演绎推理机制自动求解程序给定的目标,而不需要在程序中列出详细的求解步骤。
一、实验目的1、加深学生对逻辑程序运行机理的理解。
2、掌握Prolog语言的特点、熟悉其编程环境。
3、为今后人工智能程序设计做好准备。
二、实验内容1、编写一个描述亲属关系的Prolog程序,然后再给予出一些事实数据,建立一个小型演绎数据库。
提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。
2、编写一个路径查询程序,使其能输出图中所有路径。
提示:程序中的事实描述了下面的有向图,规则是图中两节点间通路的定义。
e3、一个雇主在发出招聘广告之后,收到了大量的应聘申请。
为了从中筛选出不量的候选人,该雇主采用下列判据:申请者必须会打字、开车,并且住在伦敦。
(a)用Prolog规则表述这个雇主的选择准则。
(b)用Prolog事实描述下列申请者的情况:史密斯住在剑桥,会开车但不会打字。
布朗住在伦敦,会开车也会打字。
简住在格拉斯哥,不会开车但会打字。
埃文斯住在伦敦,会开车也会打字。
格林住在卢顿,会开车也会打字。
(c)要求Prolog提供一个候选人名单。
Visual FoxPro实验题汇总★顺序结构程序设计1.用过程化编成方式编写本题。
求解一元二次方程〔JFC.PRG〕a=1b=4c=4x1=<-b+SQRT<b^2-4*a*c>>/<2*a>x2=<-b-SQRT<b^2-4*a*c>>/<2*a>?"方程的一个根是:",x1,space<10>,"另一个根是:",x22.理解大小写转换函数。
在文本框中输入文本串,按"转大写"按钮,文本中的英文字母变为大写,按"转小写"按钮,文本中的英文字母变为小写〔如图所示〕。
<FORM><load>:Public a<text1><interactiveChange>:Thisform.text1.value=a<大写><click>:Thisform.text1.value=upper<a><小写><click>:Thisform.text1.value=lower<a><复原><click>:Thisform.text1.value=a3.班上集体购买课外读物,在文本框中输入3种书的单价、购买数量,计算并输出所用的总金额。
<总计><click>:a=val<thisform.text1.value>b=val<thisform.text2.value>c=val<thisform.text3.value>d=val<thisform.text4.value>e=val<thisform.text5.value>f=val<thisform.text6.value>thisform.text7.value=a*b+c*d+e*f4. 在文本框中输入小时、分、秒,化成共有多少秒,然后输出之。
3的阶乘:predicatesfactorial(unsigned,real)clausesfactorial(1,1):-!.factorial(X,FactX):-Y=X-1,factorial(Y,FactY),FactX=X*FactY.goalX=3,factorial(X,Y).输出表domainslist=integer*predicateswrite_a_list(list)clauseswrite_a_list([]).write_a_list([H|T]):-write(H),nl,write_a_list(T).goalwrite_a_list([1,2,3]).统计表元素个数domainslist=integer*predicateslength_of(list,integer)clauseslength_of([],0).length_of([_|T],L):-length_of(T,TailLength),L=TailLength+1.goallength_of([1,2,3],L).每个元素加1domainslist=integer*predicatesadd1(list,list)clausesadd1([],[]).add1([Head|Tail],[Head1|Tail1]):-Head1=Head+1,add1(Tail,Tail1).goaladd1([1,2,3,4],NewList).删除整数表中的负数domainslist=integer*predicatesdiscard_negatives(list,list)clausesdiscard_negatives([],[]).discard_negatives([H|T],ProcessedTail):-H<0,!,discard_negatives(T,ProcessedTail). discard_negatives([H|T],[H|ProcessedTail]):-discard_negatives(T,ProcessedTail).goal discard_negatives([2,-45,3,468],X).判断表成员domainsnamelist=name*name=symbolpredicatesmember(name,namelist)clausesmember(Name,[Name|_]).member(Name,[_|Tail]):-member(Name,Tail).goalmember(susan,[ian,susan,john]).合并表domainsintegerlist=integer*predicatesappend(integerlist,integerlist,integerlist) clausesappend([],List,List).append([H|L1],List2,[H|L3]):-append(L1,List2,L3).goalappend([1,2,3],[5,6],L).输出表中元素domainsintegerlist=integer*namelist=symbol*predicateswritelist(integerlist)writelist(namelist)clauseswritelist([]).writelist([H|T]):-write(H,""),writelist(T).goal writelist([1,2,3,4]),nl.找出一个数字链表的最大数值。
逻辑型程序设计语⾔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程序。
淮海工学院计算工程学院实验报告书课程名:《人工智能》题目:实验一: PROLOG 上机实习班级:D软件081学号:**********名:***评语:成绩:指导教师:批阅时间:年月日实验一电路原理图绘制实验实验目的和要求目的:加深学生对逻辑程序运行激励的理解,使学生掌握PROLOG语言的特点、熟悉其编写环境,同时为后面的人工智能程序设计做好准备。
要求:1、程序自选,但必须是描述某种逻辑关系的小程序。
2、跟踪程序的运行过程,理解逻辑程序的特点。
3、对原程序可作适当修改,以便熟悉程序的编辑、编译和调试过程。
实验重点在Turbo PROLOG或Visual Prolog集成环境下调试运行简单的PROLOG程序,如描述亲属关系的PROLOG程序或其他小型演绎数据库程序等。
实验难点PROLOG语言编程实验环境Windows XP Turbo Prolog实验学时3学时,必做实验实验内容及实验步骤:内容:在Turbo PROLOG或Visual Prolog集成环境下调试运行简单的PROLOG程序,如描述亲属关系的PROLOG程序或其他小型演绎数据库程序等。
题目:PROLOG语言编程练习——亲属关系问题实验步骤:(1)打开文件目录,执行prolog应用程序,启动Turbo prolog。
(2)选择Files项,打开下拉菜单,选择New file项,进入源程序输入和编辑,或选择Load 项,选择要打开的示例程序。
(3)编辑如下源程序,选择Run项,执行程序,可以在Dialog窗口进行询问。
源程序:domainsname=symbol.sex=symbol.age=integer.predicatesperson(name,sex,age)mother(name,name)father(name,name)brother(name,name)sister(name,name)grandfather(name,name)grandmother(name,name)goalbrother(Name1,Name2),write(Name1," is ",Name2,"'s brother!\n "),sister(Name3,Name4),write(Name3," is ",Name4,"'s sister!\n "), grandfather(Name5,Name6),write(Name5," is ",Name6,"'s grandfather!\n "), grandmother(Name7,Name8),write(Name7," is ",Name8,"'s grandmother!\n ").clausesperson(alan,m,21).person(john,m,22).person(marry,w,23).person(ann,w,24).mother(alice,alan).mother(alice,john).mother(alice,marry).mother(alice,ann).mother(marry,jane).father(alan,tom).father(tom,ben).brother(Name1,Name2):-person(Name1,m,Age1),person(Name2,m,Age2), mother(Z,Name1),mother(Z,Name2),Age1>Age2.sister(Name3,Name4):-person(Name3,w,Age3),person(Name4,w,Age4), mother(Z,Name3),mother(Z,Name4),Age3>Age4.grandfather(Name1,Name2):-father(Name1,Y),father(Y,Name2).grandmother(Name7,Name8):-mother(Name7,X),mother(X,Name8).实验体会这次是prolog的第一次实验,在这次实验中对于这套新的程序进行了一定的了解,通过学习也有了更深的认识,也为下次实验奠定了基础。
实验一 PROLOG 语言编程一、实验目的1.加深学生对逻辑程序运行机理的理解。
2.掌握PROLOG 语言的特点、熟悉其编程环境。
3.为今后人工智能程序设计做好准备。
二、预习要求1.复习PROLOG 语言的语法。
2.熟悉PROLOG 的语言环境。
3.阅读一些PROLOG 的程序。
三、实验内容1、编写一个描述亲属关系的PROLOG 程序,然后再给予出一些事实数据,建立一个小型演绎数据库。
提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。
2、编写一个路径查询程序,使其能输出图中所有路径。
提示:程序中的事实描述了下面的有向图,规则是图中两节点间通路的定义。
3、一个雇主在发出招聘广告之后,收到了大量的应聘申请。
为了从中筛选出不量的候选人,该雇主采用下列判据:申请者必须会打字、开车,并且住在伦敦。
(a )用Prolog 规则表述这个雇主的选择准则。
(b )用Prolog 事实描述下列申请者的情况:史密斯住在剑桥,会开车但不会打字。
布朗住在伦敦,会开车也会打字。
简住在格拉斯哥,不会开车但会打字。
埃文斯住在伦敦,会开车也会打字。
格林住在卢顿,会开车也会打字。
(c )要求Prolog 提供一个候选人名单。
e四、代码1、编写一个描述亲属关系的PROLOG程序,然后再给予出一些事实数据,建立一个小型演绎数据库。
提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。
domainsname=symbol.predicatesmother(name,name).father(name,name).grandfather(name,name).grandmother(name,name).sister(name,name).aunt(name,name).goalgrandmother(a,X),write("X=",X),nl,father(b,Y),write("Y=",Y),nl,sister(d,Z),write("Z=",Z),nl,aunt(d,T),write("T=",T).clausesmother(a,c).mother(a,d).mother(c,g).mother(c,f).father(b,c).father(b,d).father(e,g).father(e,f).grandfather(X,Z):-father(X,Z),father(Y,Z).grandmother(X,Z):-mother(X,Y),mother(Y,Z).sister(X,Y):-mother(Z,X),mother(Z,Y).aunt(X,Y):-mother(Z,Y),sister(Z,X).2、编写一个路径查询程序,使其能输出图中所有路径。
Visual Prolog语言简介Prolog语言是人工智能与专家系统领域最著名的逻辑程序设计语言。
Visual Prolog 意指可视化逻辑程序设计语言,是基于Prolog语言的可视化集成开发环境,是Prolog开发中心(PDC)最新推出的基于Windows环境的智能化编程工具,其语言特性符合相应的国际标准ISO/IEC 13211-1:1995。
目前,Visual Prolog在美国、西欧、日本、加拿大、澳大利亚等发达国家和地区十分流行,是国际上研究和开发智能化应用的主流工具之一。
预计短时期内,在国际上已经十分流行的最新版本的可视化逻辑程序设计语言Visual Prolog将会在我国广泛流行开来,并将迅速成为我国研究和开发智能化应用的最重要的工具。
Visual Prolog具有模式匹配、递归、回溯、对象机制、事实数据库和谓词库等强大功能。
它包含构建大型应用程序所需要的一切特性:图形开发环境、编译器、连接器和调试器,支持模块化和面向对象程序设计,支持系统级编程、文件操作、字符串处理、位级运算、算术与逻辑运算,以及与其它编程语言的接口。
Visual Prolog包含一个大型库,捆绑了范围广阔的API函数:包括Windows GUI函数族、ODBC/OCI数据库函数族和Internet函数族(socket、ftp、http、cgi等)。
这个开发环境全部使用Visual Prolog语言写成,而且包含对话框、菜单、工具栏等若干编码专家和图形编辑器。
Visual Prolog支持Windows 3.x/95/98/Me/NT/2000/XP、OS/2和文本方式下的DOS、Linux和SCO UNIX。
Visual Prolog非常适合于专家系统、规划和其它AI相关问题的求解,是智能程序设计语言中具有代表性且应用较多的一种语言。
由于这种语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用。
华北电力大学实验报告||实验名称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语言编程练习及图搜索问题求解
课程名称人工智能及应用
专业班级:学生姓名:
学号:成绩:
指导教师:实验日期: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语言编程练习
一、实验目的
加深对Prolog语言执行机理的认识,掌握Prolog语言的特点,熟悉其编程环境,为以后的人工智能程序设计做好准备。
1、熟悉Turbo Prolog运行环境;
2、掌握PROLOG语言的三种基本语句,以及匹配、回溯等基本机理;
3、掌握用PROLOG程序编写、编译和运行的方法。
4、编写一个小型程序并运行。
二、相关知识
1、Prolog简介
Prolog语言于20世纪70年代诞生于法国Marseille大学,此后其应用日益广泛,尤其在日本宣布Prolog为五代机的核心语言以后,更引起世界的普遍关注。
Prolog即PROgramming in LOGic,即用逻辑进行程序设计,它是由逻辑学家开发的一种描述式语言。
它以谓词逻辑为基础,故也称为逻辑型语言。
本门课程实验程序将在Turbo Prolog上实现。
2、Turbo Prolog的使用
1) 在硬盘上(假设为d盘。
最好不要用c盘)建立目录d:\Turbo Prolog,将Prolog所有文件拷贝到该目录下。
在D:\Turbo Prolog下建立存放Prolog程序的文件夹d:\Turbo Prolog\test,用来保存Prolog程序文件。
2)执行文件为D:\Turbo Prologd\ Prolog.exe,启动Prolog的运行环境。
3)在Turbo Prolog集成环境中新建一个Prolog程序(file→new file),输入程序,保存到d:\Turbo Prolog\test文件夹中。
4) 编译程序(compile)。
5)运行程序(run)。
在右侧的窗口中输入“?-”提示符后输入要查询的问题。
6)如需先前输入的修改程序,应先打开文件(file→load),修改完程序并保存后,再执行4)步进入。
三、实验内容及步骤
新建一文件:like.pro,保存至d:\Turbo Prolog\test文件夹中。
在该文件中建立如下事实数据库:
注:谓词名(如:like)和常量(如:mark)用小写字母,每条语句以点‘.’结束。
查询1:
?- like(mark,tennis). {查询的目标(goal)}
yes. {有某个事实与目标匹配,查询成功,回显' yes.'}
查询2:
?- like(mark,football).
no. {没有与目标匹配的事实,查询失败,回显'no.' }
查询3:
?- like(X, tennis ). { X为变量(大写),匹配中X与ellen被绑定}
X = ellen {按回车键}
yes. {表示还有答案}
如果用户输入分号(;),Prolog就开始寻找其他的答案。
首先它必须释放(unbinds)变量X。
然后从上一次成功的位置的下一条子句开始继续搜索。
这个过程叫做回溯(backtracking)。
?- like(X, tennis ).
X = ellen ;
X = mark ;
X = tom ;
no {表示没有答案了}
查询4:
?- like(X, tennis ),!.
X = ellen ;
no
截断谓词cut,prolog内部谓词,使用符号!来表示。
cut能够有效地抑制其左边的子目标与其父目标的回溯,而它右边的目标则不受影响,如下面查询:
?- like(X, tennis ),! like(tom,Y ),
四、思考题
1、Prolog语言与命令式语言的执行机理有什么不同?
2、试分析Prolog推理时,目标与子句的匹配顺序。