Pyke 逻辑编程入门(2):表示事实的陈述句

事实陈述

在Pyke中,陈述句是关于事实的陈述,可直接叫做“事实”。“事实”,是 Pyke 推理行为的根据,算是 Pyke 干活必备的家常便饭吧

可以把事实陈述当做说话的句子。比如,例程 family_relations 中这样处理亲属关系:

“Bruce 是 Thomas (他的父亲) 和 Norma (他的母亲) 的儿子。”

让我们把句子简化些。这句话涉及3个人:Bruce, Thomas 和 Norma,其余的则是表示3人之间关系的标识。简化成:

son_of(Bruce, Thomas, Norma)

简化的事实陈述,可以任意命名,这里是叫 son_of。也可以叫“parents_of”,表示下面的意思:

“Bruce 的父母是 Thomas (他的父亲)和 Norma (他的母亲)。”

但是,son_of 这个事实有额外的信息,即 Bruce 是儿子,不是女儿。

警示!

事实陈述不是函数!son_of(Bruce, Thomas, Norma) 的长相,像是 Python 函数的样子,但它不是函数调用语句!可能期待它会执行、做些事情、返回值。但是,它的确只是个事实陈述,是个数据,它不做任何事情,也从不返回值。

 

注意,不同的事实陈述,可以表示相同的逻辑关系:

son_of(Bruce, Thomas, Norma)    
son_of(Michael, Bruce, Marilyn) 
son_of(David, Bruce, Marilyn)   

只有参数不同,事实陈述才有意义。不需要重复陈述同一事实。如果真地出现相同的事实陈述,则只保留一个,其余的均被忽略:

son_of(Bruce, Thomas, Norma) 

son_of(Bruce, Thomas, Norma) 

son_of(Bruce, Thomas, Norma) 

完全等同于:

son_of(Bruce, Thomas, Norma)
最后一点,参数所处的位置有重要意义。例如:
son_of(son, father, mother)

改变了参数的顺序,就改变了事实的本意:

son_of(Bruce, Thomas, Norma)

son_of(Bruce, Norma, Thomas)

第一句说, Thomas 是 Bruce 的父亲;但第二句说 Norma 是 Bruce 的父亲!

 

事实陈述的句法结构

已经看到,Pyke 的事实陈述语句,是高度结构化的。

注意

Pyke 知识库是一维结构,知识库中只有事实陈述语句,不允许包含其他知识库。同时,事实陈述语句也是一维结构,句中不能包含其他语句。

 

事实陈述句由三部分组成:

  1. 知识库名称,如: family.
  2. 知识单元名称,如:son_of.
  3. 参数,直接以 Python 数据表示。 目前的 Pyke,趋向于参数不可变化。

事实陈述的句法是这样的:

statement ::= IDENTIFIER '.' IDENTIFIER '(' {argument,} ')'
语句::= 标识.标识(参数,参数,……)                               

知识库

第一个标识,是知识库名称。在例程 family_relations 中,知识库名字叫做 family。

 

注意

在反向推理过程中,可以省略知识库的名字。当前选定的规则库,默认是规则库的类别。

 

知识单元

第二个标识,是知识单元的名称,它表示参数之间的关系。可看做事实的类型或主题。例如, son_of 是表示事实的一种类型,由(儿子,父亲,母亲)三个参数构成。

参数

参数可以是 Python 简单的数据结构(数字,字符串,None,True 或 False),或者由它们组成的元组(包括嵌套的元组)。目前,事实陈述是固定不变的,因此,参数也是如此。

注意

Prolog 允许参数是其他事实陈述名称,但 Pyke 不允许。因为,Pyke 需要与 Python 集成,而 Python 没有“事实陈述”的概念,于是,我们就在 Pyke 中用元组。在 Python 编程中使用元组,是件开心的事情。

例程 family_relations 中表示事实的陈述句完整格式是:

 

family.son_of(Bruce, Thomas, Norma)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值