【Prolog】2.0 基础应用

【术语统一 terms unify】
两者统一,只需满足下面两条件之一
1.原本就是相同的
2.包含变量,这些变量可以用术语统一实例化,从而得到相等的术语

mia和mia是统一的,42和42是统一的,woman(mia)和woman(mia)是统一的
woman(mia)和woman(jody)不是统一的

【实例化 Instantiations】
当Prolog统一两个术语时,它会执行必要的实例化,以便在之后的操作中,二者相等
1.如果T1和T2是常数,如果它们是相同的原子,或者相同的数,那么T1和T2是统一的
2.如果T1是变量并且T2是任何类型的项,则T1和T2统一,并且T1实例化为T2(反之亦然)
3.如果T1和T2是复杂的术语,则它们在以下情况下统一:1.它们具有相同的函子和对数 2.所有其对应的自变量都统一 3.变量实例化是兼容的
例子1:

?- mia = X.  
 X=mia   
  yes   

例子2:

?- X=mia, X=vincent.
 no

no的原因在于,在实现第一个目标之前,Prolog用mia实例化了X,因此它无法与vincentany统一。因此,第二个目标失败了。

例子3:

?- k(s(g),Y) = k(X,t(k)). 
X=s(g) 
Y=t(k) 
yes

例子4:

?- k(s(g),t(k)) = k(X,t(Y)).  
 X=s(g) Y=k   
 yes

另外,在查询?- father(X) = X.的时候,会出现一个X=father(father(father(...))))的死循环,但是最终会得到yes的结果
这就引出了一个概念,叫做“占用检查occurscheck” :
如果要求将一个变量与另一项统一起来,它会检查该变量是否出现在这一项中

【统一性实战】
Eg1 :

Eg2 :

Eg3 :

【证据搜索 Proof Search 以及 搜索树 search trees】
当我们提供了一个条件或者目标进行答案搜索的时候,Prolog会进行一个名为“搜索树”的方法进行搜索
例1:

例2:

【ProLog的搜索与回答】
Prolog有一种特定的方式来回答查询,具体如下所示
1.从上到下搜索知识库
2.从左到右处理子句
3.从错误的选择中返回

posted @ 2021-03-23 12:55  RetenQ  阅读(127)  评论(0编辑  收藏  举报