SWI-PROLOG第一章
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章
事实、规则和询问
本章有两个主要目标:
给出一些简单的序言程序示例。这将向我们介绍序言中的三个基本构造:事实、规则和查询。它还将向我们介绍一些其他的主题,比如逻辑在序言中的作用,以及在变量的帮助下实现统一的想法。
通过定义术语、原子、变量和其他句法概念,开始对序言的系统研究。
1.1一些简单的例子
在序言中只有三个基本的构造:事实、规则和查询。一个事实和规则的集合被称为知识库(或数据库)和prolog编程都是关于写知识库。也就是说,prolog程序只是知识基础、事实集合和规则,它们描述了我们发现有趣的一些关系集合。
那么我们如何使用prolog程序呢?提出问题。也就是说,通过询问有关存储在知识库中的信息的问题。
这听起来很奇怪。当然,它与编程有很大关系这一点并不明显。毕竟,编程不就是告诉计算机该做什么吗?但是,正如我们将看到的,编程的序言方式非常有意义,至少对于某些任务是如此;例如,它在计算语言学和人工智能(ai)中是有用的。但是,与其笼统地谈论Prolog,不如我们直接开始写一些简单的知识基础;这不仅仅是学习Prolog的最好方法,这是唯一的方法。
知识基础1
知识基础1(KB1)只是一个事实的集合。事实被用来陈述某些有关情况的无条件真实情况。例如,我们可以说,Mia、Jody和Yolanda都是妇女,Jody演奏的是空中吉他,一个聚会正在举行,使用了以下五个事实:
woman(mia).
woman(jody).
woman(yolanda).
playsAirGuitar(jody).
party.
这个收集的事实是KB1。这是我们的第一个prolog程序的例子。请注意,MIA、Jody和Yolanda的名字,财产妇女和playsairgifi,以及命题方的名字都是以小写字母形式出现的。这很重要,我们稍后再看原因。
我们如何使用KB1?提出问题。也就是说,通过询问KB1包含的信息。这里有一些例子。我们可以用这个问题来问PrologMia是不是个女人:
?- woman(mia).
prolog将回答
yes
显然,这是kb1中明确记录的事实之一。顺便说一句,我们不打打字机.
?-.这个符号(或类似的东西,取决于您使用的prolog的实现)是prolog解释器在等待评估查询时显示的提示符号。我们只需要输入实际的查询(比如女人)(Mia)后面跟着。一个完整的停。全停很重要。如果不键入它,prolog就不会开始处理查询。
同样,我们也可以通过提出以下问题来询问Jody是否会演奏空气吉他:
?- playsAirGuitar(jody).
prolog将再次回答是,因为这是KB1中的事实之一。然而,假设我们问Mia是否会弹空气吉他:
?- playsAirGuitar(mia).
我们会得到答案
no
为什么?首先,这在KB1中不是事实。此外,KB1非常简单,并且不包含其他信息比如我们将会学习的规则(这可能会帮助)Prolog推断,(也就是说推断),Mia是否会弹空气吉他。因此,prolog正确地得出了paysairgis(mia)不遵循KB1的结论。
这里有两个重要的例子。首先,假设我们提出以下问题:
?- playsAirGuitar(vincent).
我再说一遍不。为什么?好吧,这个问题是关于一个人(Vincent)它没有任何信息,所以(对)它的结论是,playsairgis(Vincent)不能从KB1的信息中推断出来。
同样,假设我们提出以下问题:
?- tatooed(jody).
再来一遍序言会回答不。为什么?这个查询是关于一个属性,它没有信息,所以它再一次,(正确),得出结论,这个查询不能从KB1中的信息中推断出来。事实上,一些prolog实现将通过错误消息响应这个查询,告诉您谓词或过程tatooed没有被定义;我们将很快引入谓词的概念。
不用说,我们也可以对命题提出疑问。例如,如果我们提出查询
?- party.
就会有反应
yes
如果我们的查询
?- rockConcert.
然后Prolog的反应
no
正如我们所期望的。
知识基础2
这是我们第二个知识库:KB2,
happy(yolanda).
listens2Music(mia).
listens2Music(yolanda):- happy(yolanda).
playsAirGuitar(mia):- listens2Music(mia).
playsAirGuitar(yolanda):- listens2Music(yolanda).
有两个事实KB2, listens2Music(mia)和快乐(紫罗兰)。最后它包含三项规则。
规则状态信息有条件地真正的感兴趣的情况。例如,第一条规则说尤兰达听音乐如果她是幸福的,,最后一个规则说,尤兰达空气吉他如果她听音乐。更一般的, :-应该被���读为“如果”,或者“隐含了”。的左手边 :-被称为规则的头,右手边的部分称为身体。所以在一般规则说: 如果规则的身体是真的, 然后的规则是正确的。现在的关键点:
如果一个知识库包含一个规则头 :- 的身体, 和Prolog知道那身体遵循从知识库中的信
息 Prolog可以推断出头。
这个基本推理步骤叫做演绎推理。
让我们考虑一个例子。假设我们问米娅扮演空气吉他:
?- playsAirGuitar(mia).
Prolog会是的。为什么?虽然找不到 playsAirGuitar(mia)事实明确记录在KB2,它可以找到规律
playsAirGuitar(mia):- listens2Music(mia).
此外,KB2还包含事实 listens2Music(mia)。因此Prolog可以使用规则的演绎推理推断
出 playsAirGuitar(mia) .
我们的下一个例子展示了演绎推理的Prolog可以连锁在一起使用。假设我们问:
?- playsAirGuitar(yolanda).
Prolog会是的。为什么?首先,通过使用这个事实快乐(紫罗兰)和法治