【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.从错误的选择中返回
【Prolog - 2.0 基础应用】的更多相关文章
- 【Prolog - 1.0 基础语法与概念】
[概述] Prolog的语法与其它常用语言(如C,JAVA等)不同,它更接近于自然语言. [实例] 当我想表示"Mia是以女人"这个事实(之后会提到事实这个概念)的时候,我可以这么 ...
- <-0基础学python.第一课->
初衷:我电脑里面的歌曲很久没换了,我想听一下新的歌曲,把他们下载下来听,比如某个榜单的,但是一首一首的点击下载另存为真的很恶心 所以我想有没有办法通过程序的方式来实现,结果还真的有,而且网上已经有有人 ...
- Android 工程在4.0基础上混淆
Android现在对安全方面要求比较高了,我今天要做的对apk进行混淆,用所有的第三方工具都不能反编译,作者的知识产权得到保障了,是不是碉堡了. 一,首先说明我这是在4.0基础上进行的. 先看看pro ...
- Android程序开发0基础教程(一)
程序猿学英语就上视觉英语网 Android程序开发0基础教程(一) 平台简单介绍 令人激动的Google手机操作系统平台-Android在2007年11月13日正式公布了,这是一个开放源码的操 ...
- swift3.0基础语法
swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...
- 【转】WF4.0 (基础篇)
转自:http://www.cnblogs.com/foundation/category/215023.html 作者:WXWinter —— 兰竹菊梅★春夏秋冬☆ —— wxwinter@16 ...
- JAVA思维导图系列:多线程0基础
感觉自己JAVA基础太差了,又一次看一遍,已思维导图的方式记录下来 多线程0基础 进程 独立性 拥有独立资源 独立的地址 无授权其它进程无法訪问 动态性 与程序的差别是:进程是动态的指令集合,而程序是 ...
- 【转】Android 工程在4.0基础上混淆
Android现在对安全方面要求比较高了,我今天要做的对apk进行混淆,用所有的第三方工具都不能反编译,作者的知识产权得到保障了,是不是碉堡了. 一,首先说明我这是在4.0基础上进行的. 先看 ...
- 0基础搭建Hadoop大数据处理-编程
Hadoop的编程可以是在Linux环境或Winows环境中,在此以Windows环境为示例,以Eclipse工具为主(也可以用IDEA).网上也有很多开发的文章,在此也参考他们的内容只作简单的介绍和 ...
随机推荐
- Flutter 设置input边框
example 1 import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp ext ...
- Flutter: 判断是Android还是Ios
/// 在ui中使用下面的这个判断 Theme.of(context).platform == TargetPlatform.android /// 而不是 import 'dart:io' Plat ...
- NGK项目为什么要发币
每个区块链创新应用的出现,基本都发行了自己的数字货币,像比特币,以太坊等.数字货币是区块链的资产,是区块链技术的一个应用,实现了用区块链传递价值的目的.目前市面上的数字货币林林总总几千种,其中公链发行 ...
- NGK公链如何构建区块链数字经济商业帝国?
2020年对于区块链市场来说,重大的利好消息莫过于NGK公链的上线了.NGK公链其广泛的市场前景.顶尖的技术,一直备受众多大型机构以及投资者所看好.同时,NGK公链也不负众望,在上线以后,就开始落地到 ...
- Github Action 快速上手指南
前言 各位读者,新年快乐,我是过了年匆忙赶回上海努力搬砖的蛮三刀. Github之前更新了一个Action功能(应该是很久以前了),可以实现很多自动化操作.用来替代用户自己设置的自动化脚本(比如:钩子 ...
- Windows定时重新启动(适用于server 2012 r2)
直接看链接吧:https://jingyan.baidu.com/article/2d5afd69dd8e9d85a2e28eb7.html 开始菜单,找到"计划任务程序"; 2 ...
- 阿里云DataWorks实践:数据集成+数据开发
简介 什么是DataWorks: DataWorks(数据工场,原大数据开发套件)是阿里云重要的PaaS(Platform-as-a-Service)平台产品,为您提供数据集成.数据开发.数据地图.数 ...
- Java基础语法:类型转换
由于Java是强类型语言,所以有时候在进行运算时,需要用到类型转换. 整型.常量.字符类型数据可以混合运算. 运算中,不同类型的数据先转化为同一类型,然后再进行运算. 类型转换等级有低级到高级的划分, ...
- MySQL提权 通过UDF
目录 UDF是什么 命令执行 文本写入 Example: 远程写入 反弹Shell 提权 UDF是什么 参考:https://www.cnblogs.com/litlife/p/9030673.htm ...
- 只需2分钟!PC端的报表即可转换成手机报表
转: 只需2分钟!PC端的报表即可转换成手机报表 手机制作报表,这个大家不知有没有尝试过,虽然我们平时都用电脑做,但是电脑要是不在身边了,手机就可以用来应应急.但其实小编并没有在手机上制作报表的实践经 ...