【术语统一 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.从错误的选择中返回

【Prolog - 2.0 基础应用】的更多相关文章

  1. 【Prolog - 1.0 基础语法与概念】

    [概述] Prolog的语法与其它常用语言(如C,JAVA等)不同,它更接近于自然语言. [实例] 当我想表示"Mia是以女人"这个事实(之后会提到事实这个概念)的时候,我可以这么 ...

  2. <-0基础学python.第一课->

    初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...

  3. Android 工程在4.0基础上混淆

    Android现在对安全方面要求比较高了,我今天要做的对apk进行混淆,用所有的第三方工具都不能反编译,作者的知识产权得到保障了,是不是碉堡了. 一,首先说明我这是在4.0基础上进行的. 先看看pro ...

  4. Android程序开发0基础教程(一)

    程序猿学英语就上视觉英语网 Android程序开发0基础教程(一)   平台简单介绍   令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...

  5. swift3.0基础语法

    swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...

  6. 【转】WF4.0 (基础篇)

    转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter  ——  兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...

  7. JAVA思维导图系列:多线程0基础

    感觉自己JAVA基础太差了,又一次看一遍,已思维导图的方式记录下来 多线程0基础 进程 独立性 拥有独立资源 独立的地址 无授权其它进程无法訪问 动态性 与程序的差别是:进程是动态的指令集合,而程序是 ...

  8. 【转】Android 工程在4.0基础上混淆

    Android现在对安全方面要求比较高了,我今天要做的对apk进行混淆,用所有的第三方工具都不能反编译,作者的知识产权得到保障了,是不是碉堡了.   一,首先说明我这是在4.0基础上进行的.   先看 ...

  9. 0基础搭建Hadoop大数据处理-编程

    Hadoop的编程可以是在Linux环境或Winows环境中,在此以Windows环境为示例,以Eclipse工具为主(也可以用IDEA).网上也有很多开发的文章,在此也参考他们的内容只作简单的介绍和 ...

随机推荐

  1. GeoJSON feature & Mapbox segments

    GeoJSON feature & Mapbox segments custom JSON format ??? { "rows": [], "props&quo ...

  2. Masterboxan INC是你靠近财富的最佳选择

    Masterboxan INC万事达资产管理有限公司(公司编号:20151264097)是一家国际性资产管理公司,主要提供外汇.证券.投资管理和财富管理等金融服务,其在投资方面一直倡导组合型投资构建稳 ...

  3. SSL/TLS协议详解(中)——证书颁发机构

    本文转载自SSL/TLS协议详解(中)--证书颁发机构 导语 上一篇中,我们讨论了关于Diffie Hellman算法的SSL/TLS密钥交换.我们最终认为需要第三方来验证服务器的真实性,并提出了证书 ...

  4. 不同浏览器CSS样式不兼容问题

    一句话,我想的太复杂了.向朋友请教才了解到,其实只要加个判断即可,首先获取到浏览器的基本信息,像什么版本啊,名称啊.默认语言啊等等,然后根据不同浏览器默认加载不同CSS样式即可,获取浏览器版本的连接如 ...

  5. vue:表格中多选框的处理

    效果如下: template中代码如下: <el-table v-loading="listLoading" :data="list" element-l ...

  6. SpringMVC-03 RestFul和控制器

    SpringMVC-03 RestFul和控制器 控制器Controller 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现. 控制器负责解析用户的请求并将其转换为一个模型. ...

  7. Python 元类编程实现一个简单的 ORM

    概述 什么是ORM? ORM全称"Object Relational Mapping",即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码 ...

  8. sitemesh简单介绍

    SiteMesh 是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的. Sitemesh是由一个基于Web页面布局.装饰以及与现存Web应用整合的框架. 它能帮 ...

  9. 【Django必备01】——什么是Django框架?有什么优势?模块组成介绍。

    01.什么是Django框架? Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式.使用这种架构,程序员可以方便.快捷地创建高品质.易维护.数据库驱动的应用程序. ...

  10. Java中的名称命名规范:

    Java中的名称命名规范:(不遵守,也不会出现编译的错误) 包名:多单词组成时所有字母都小写:xxxyyyzzz 类名.接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz 变量名.方法名: ...