实验一 Prolog语言编程练习

合集下载

人工智能实验一指导

人工智能实验一指导

实验1: Prolog语言程序设计人工智能(AI)语言是一类适应于人工智能和知识工程领域的、具有符号处理和逻辑推理能力的计算机程序设计语言。

能够用它来编写求解非数值计算、知识处理、推理、规划、决策等具有智能的各种复杂问题。

Prolog是当代最有影响的人工智能语言之一,由于该语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用,已经成为人工智能应用领域的强有力的开发语言。

尽管Prolog语言有许多版本,但它们的核心部分都是一样的。

Prolog的基本语句仅有三种,即事实、规则和目标三种类型的语句,且都用谓词表示,因而程序逻辑性强,方法简捷,清晰易懂。

另一方面,Prolog是陈述性语言,一旦给它提交必要的事实和规则之后,Prolog就使用内部的演绎推理机制自动求解程序给定的目标,而不需要在程序中列出详细的求解步骤。

一、实验目的1、加深学生对逻辑程序运行机理的理解。

2、掌握Prolog语言的特点、熟悉其编程环境。

3、为今后人工智能程序设计做好准备。

二、实验内容1、编写一个描述亲属关系的Prolog程序,然后再给予出一些事实数据,建立一个小型演绎数据库。

提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。

2、编写一个路径查询程序,使其能输出图中所有路径。

提示:程序中的事实描述了下面的有向图,规则是图中两节点间通路的定义。

e3、一个雇主在发出招聘广告之后,收到了大量的应聘申请。

为了从中筛选出不量的候选人,该雇主采用下列判据:申请者必须会打字、开车,并且住在伦敦。

(a)用Prolog规则表述这个雇主的选择准则。

(b)用Prolog事实描述下列申请者的情况:史密斯住在剑桥,会开车但不会打字。

布朗住在伦敦,会开车也会打字。

简住在格拉斯哥,不会开车但会打字。

埃文斯住在伦敦,会开车也会打字。

格林住在卢顿,会开车也会打字。

(c)要求Prolog提供一个候选人名单。

《vfp实验题整理》word版

《vfp实验题整理》word版

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. 在文本框中输入小时、分、秒,化成共有多少秒,然后输出之。

PROLOG 程序范例

PROLOG 程序范例

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详细教程

逻辑型程序设计语⾔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亲属关系

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程序

人工智能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、编写一个路径查询程序,使其能输出图中所有路径。

prolog简单教程

prolog简单教程

likes(tom,wine). likes(tom,book).
* 程序内goal则是找到一个解就停止搜索了 例:predicates likes(symbol,symbol) goal likes(tom,W),write(―tom likes ‖,W,‖\n‖). clauses likes(tom,food). likes(tom,wine). 程序内goal 运行结果 likes(tom,book). Dialog Tom tom likes food
3、影响回溯的手段——fail和cut
注意:Turbo Prolog ―外Goal‖ 和“程序内goal‖ 有“勤” “懒” 之分 * 对话框中输入的外Goal主动找出全部解并报告有几个 外Goal运行情况 Solutions Dialog 例:predicates Goal:likes(tom,What) likes(symbol,symbol) What=food What=wine clauses What=book likes(tom,food). 3 Solutions

表(List)
——

表由方括号与元素组成,元素又可是一个表。 非空表可用[x|y]表示,x—表头 y—表尾 • 例: [a,b,c] [a | [b,c]] 表头 a
表尾 [c]
[c]
[b | [c]]
[c | []]
表头 b 表尾 [c]
表头 c 表尾 []
空表无表头!
匹配与回溯
GOAL(目标)
predicates 运行 thief(symbol) Dialog likes(symbol,symbol) Goal : may_steal(john,What) may_steal(symbol,symbol) What=food clauses What=wine thief(john). 2 Solutions likes(tom,food). likes(john,wine). likes(john,X):- likes(tom,X). may_steal(X,Y):- thief(X),likes(X,Y).

实验1 Visual Prolog入门(1)

实验1 Visual Prolog入门(1)

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相关问题的求解,是智能程序设计语言中具有代表性且应用较多的一种语言。

由于这种语言很适合表达人的思维和推理规则,在自然语言理解、机器定理证明、专家系统等方面得到了广泛的应用。

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

实验一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推理时,目标与子句的匹配顺序。

相关文档
最新文档