现在学 Prolog 事实,规则和查询

转载自:https://mp.weixin.qq.com/s/KEvuSWTwz6Ef1Y7-8riQZQ

本文有两个主要目标:

1.给出一些prolog程序的简单例子。这将向我们介绍prolog中的三个基本构造:事实、规则和查询。它还将向我们介绍一些其他主题,如prolog中逻辑的作用,以及借助变量执行合一的思想。

2.开始prolog的系统研究,定义项、原子、变量和其他句法概念。

1一些简单的例子

prolog中只有三个基本结构:事实、规则和查询。事实和规则的集合称为知识库(或数据库),prolog编程就是编写知识库。那也就是说,prolog程序只是知识库、事实和规则的集合,它们描述了一些我们感兴趣的关系集合。

  那么我们如何使用Prolog程序?通过构成查询。也就是说,通过询问有关知识库中存储的信息的问题。

  这听起来可能有点奇怪。显然,这与编程有很大关系。毕竟,编程不就是告诉计算机该做什么吗?但正如我们将要看到的,Prolog编程方法有很多意义,至少对于某些任务来说是这样;例如,它在计算语言学和人工智能(AI)中很有用。但是,我们不必泛泛地谈论Prolog,而是直接开始编写一些简单的知识库;这不仅是学习prolog的最好方法,也是唯一的方法。

知识库1

知识库1(KB1)只是事实的集合。使用事实陈述某些情况下无条件适用的事物。例如,我们可以说Mia,Jody和Yolanda是女性,乔迪在弹奏空中吉他,并且正在使用

以下五个事实:

woman(mia).

woman(jody).

woman(yolanda).

playsAirGuitar(jody).

party.

  该事实集合为KB1。这是我们序言的第一个例子程序。请注意,名称mia,jody和yolanda属性是女人和playsAirGuitar,并且提议party一直这样写,以使第一个字母小写。这个很重要; 我们稍后会明白为什么。

  我们如何使用KB1?通过构成查询。也就是说,通过询问有关KB1包含的信息的问题。这里有些例子。我们可以通过以下查询来询问Prolog Mia是否是女性:

?- woman(mia).

Prolog会回答

true

出于明显的原因,这是明确记录在KB1其中的事实之一。顺便说一句,我们不输入?-.这个符号(或其他喜好,取决于您使用的Prolog的实现)是Prolog解释器在等待时显示的提示符号评估查询。我们只输入实际的查询(例如woman(mia)),然后是.(句号).句号很重要。如果您没有输入,Prolog将不会开始处理查询。

  同样,我们可以通过(Jody plays air guitar by posing)弹吉他进行以下查询:

?- playsAirGuitar(jody).

Prolog将再次回答是,因为这是KB1中的事实之一。

但是,假设我们问Mia是否弹吉他:

?- playsAirGuitar(mia).

我们会得到答案

false

为什么?好吧,首先,这不是KB1中的事实。而且,KB1是非常简单,并且不包含其他信息(例如规则我们将在短期内了解),这可能有助于Prolog进行推断(推论)Mia是否在弹奏吉他。所以Prolog正确地得出结论KB1中没有playsAirGuitar(mia)的声音。

  这是两个重要的例子。首先,假设我们构成查询:

?- playsAirGuitar(vincent).

Prolog再次回答“否”。为什么?好吧,这个查询是关于一个人的(Vincent)它没有任何信息,因此(正确)得出的结论是无法从KB1中的信息推导出playsAirGuitar(vincent)。

  同样,假设我们构成查询:

?- tatooed(jody).

再次Prolog将回答“否”。为什么?好吧,这个查询是关于没有相关信息的属性(正在纹身),因此再次(正确)得出结论,无法从KB1中的信息得出。(实际上,某些Prolog实施会做出回应带有错误消息的查询,告诉您谓词或没有定义程序 我们将很快介绍谓词)。

  不用说,我们还可以对命题进行查询。例如,如果我们构成查询

?- party.

然后Prolog会回应

true

如果我们构成查询

?- rockConcert.

然后Prolog会回应

false

完全符合我们的预期。

知识库2

这是KB2,这是我们的第二个知识库:

happy(yolanda).

listens2Music(mia).

listens2Music(yolanda):- happy(yolanda).

playsAirGuitar(mia):- listens2Music(mia).

playsAirGuitar(yolanda):- listens2Music(yolanda).

KB2中有两个事实,listens2Music(mia) and happy(yolanda).

它包含的最后三个项目是规则。

    规定状态信息有条件地符合以下情况的规则利益。例如,第一个规则说Yolanda听音乐如果她快乐,最后一条规则说,Yolanda她弹吉他听音乐。更一般而言,:-应该读为“ if”,或者“暗示”。:-左侧的部分称为规则的首部,右侧的部分称为主体。所以

一般规则说:如果规则的主体是正确的,那么规则也是如此。现在,关键点是:

 

    如果一个知识库包含一个规则头:-规则体,和prolog知道规则体从知识库中的信息,然后prolog可以推断头。

这个基本的推导步骤称为“惯性方式”。

    让我们考虑一个例子。假设我们问Mia是否在弹吉他:

?- playsAirGuitar(mia).

Prolog将回答是。为什么?好吧,虽然找不到playsAirGuitar(mia)作为明确记录在KB2中的事实,它可以找到规则

playsAirGuitar(mia):- listens2Music(mia).

此外,KB2还包含事实listens2Music(mia).因此,Prolog可以使用惯用定律的规则来推断出playsAirGuitar(mia).的角色。

  我们的下一个示例显示Prolog可以将惯用方式链接在一起。假设我们问:

?- playsAirGuitar(yolanda).

Prolog会回答是。为什么?好吧,首先,利用事实happy(yolanda)和规则

listens2Music(yo

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值