SWI-PROLOG第一章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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会是的。为什么?首先,通过使用这个事实快乐(紫罗兰)和法治

相关文档
最新文档