【Prolog - 1.0 基础语法与概念】
【概述】
Prolog的语法与其它常用语言(如C,JAVA等)不同,它更接近于自然语言。
【实例】
当我想表示“Mia是以女人”这个事实(之后会提到事实这个概念)的时候,我可以这么写
woman(mia).
这个格式代表这一个事实,a(b). b是a 事实上命名没什么要求,只要你自己记得就好
当我想要知道某个问题的答案,我就可以通过-?对其进行问询,比如
woman(mia).
-? woman(mia).
yes
这就是使用Prolog的一个简单的例子
【常量和变量】
Prolog常量和变量的区分规则简单粗暴:
小写字母是常量,如abc;大写字母则是变量,如Abc
在要求输出时,常量输出自身,变量输出自己的代表值(比如我给Abc赋值了4396.输出Abc就是输出4396,输出abc就是输出abc)
【关系、属性】
两个对象的关系,用括号()表示,比如mia和zed是朋友,则写成
friend(mia,zed).
friend(zed,mia).
注意,第一条的意思是mia是zed的朋友,不代表zed是mia的朋友,二者互为朋友则需要各写一次 ,这个就叫关系
如果括号中,只有一个对象,那么这便是属性
woman(mia).
【规则】
规则是prolog进行推断的依据,可以类比其它语言中的if
比如刚才我们嫌朋友的判定太麻烦,于是就可以加入下面这条规则
friend(X, Y) :- friend(Y,X).
这里面的XY就是变量,其中 A:-B 代表从B可以推断出A,也就是B是true,那么A也是true
**:- **代表推理关系
那么,如果一个推断需要多个条件确定呢,那么就把条件用逗号隔开,就像A:- B,C 比如
mother(X, Y) :- child(Y,X), female(X).
X是Y的妈,需要二者有母子关系,并且X是女的
另外,如果一条规则取决于某个条件为false,则在条件之前加上+表示否定
【查询】
在对应的编译器(有时也叫解释器)中,使用 -? ... 来进行查询,...代表要查询的东西
【Prolog - 1.0 基础语法与概念】的更多相关文章
- swift3.0基础语法
swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...
- swift3.0基础语法(2)
变量/常量,元组声明 var aaa = 0;//声明变量aaa 首次赋值时自动解析为Int类型 var aaa:Int = 0;//声明Int类型变量aaa let aaa = 0;//声明常量aa ...
- ECMAScript 5.0 基础语法(上)
银子: 一般来说,一门编程语言的基础语法都是大同小异的.比如,python的基础语法,包括:数据类型,变量,作用域,运算符,流程控制(if...else...语句),循环,编码,数据类型的操作(增删改 ...
- ① Python3.0基础语法
稍微了解一下py2.0和py3.0的区别,Py3.0在设计的时候,为了不带入过多的累赘,没有考虑向下兼容低版本的Py2.0.而在低版本中Py2.6作为过渡版,基本使用Py2.x的语法和库,同时考虑Py ...
- Swift3.0基础语法学习<二>
对象和类: // // ViewController2.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © ...
- Vue 2.0基础语法:系统指令
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Vue初体验 新建一个空的项目,引入vue.js文件.写如下代码: &l ...
- Swift3.0基础语法学习<一>
// // ViewController.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © 2016年 ...
- 【Prolog - 2.0 基础应用】
[术语统一 terms unify] 两者统一,只需满足下面两条件之一 1.原本就是相同的 2.包含变量,这些变量可以用术语统一实例化,从而得到相等的术语 mia和mia是统一的,42和42是统一的, ...
- ECMAScript 5.0 基础语法(下)“稍微重点一点点”
接上篇 七.常用内置对象(复杂数据类型)(重点) (1)数组Array 创建:例 var colors = ['red','blue','green'] #推荐这样,因为简单粗暴 或:v ...
随机推荐
- 关于TCP的Total Length
TCP/IP传输层 文档 随便找了个发送的TCP: 70 89 cc ee 84 2c 3c 2c 30 a6 a2 d0 08 00 45 00 00 4c c7 a8 40 00 80 06 00 ...
- Python元组拆包捡到8倍镜快准狠
元组拆包 元组是不可变列表,列表是通过索引取值的,元组也是: tuple_test = (1, 2, 3) a = tuple_test[0] b = tuple_test[1] c = tuple_ ...
- HQYJ嵌入式学习笔记——C语言复习day1
第一天:Linux命令 vim操作 第二天:数据类型 运算符 顺序语句第三天:分支语句 循环语句第四天:循环语句 数组第五天:数组第六天:指针第七天:函数 数组与指针第八天:数组指针第九天:递归 第十 ...
- MapString转Map
当把map使用toString方法转换后,如何再转换为map对象呢?方法很简单,把字符串进行截取,依次存放到新的map中: public static Map<String,Object> ...
- Same Origin Policy 浏览器同源策略详解
同源策略 Same Origin Policy 日常开发中最常与网络打交道,那关于浏览器的同源策略和跨域相关的知识是该整理一下了. 首先需要明确的是,同源策略是浏览器的安全策略,由于存在这个策略,我们 ...
- 学习java之基础语法(一)
学习java之基础语法(一) 基本语法 编写 Java 程序时,应注意以下几点: 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说 ...
- 翻译:《实用的Python编程》03_03_Error_checking
目录 | 上一节 (3.2 深入函数) | 下一节 (3.4 模块) 3.3 错误检查 虽然前面已经介绍了异常,但本节补充一些有关错误检查和异常处理的其它细节. 程序是如何运行失败的 Python 不 ...
- CodeBlocks的安装配置以及使用教程
CodeBlocks的安装配置以及使用教程 教程写的很啰嗦,本来几句话就能搞定的,但为了照顾到那部分真正的小白还请大家见谅! 一.下载 前往CodeBlocks官网下载带编译器的版本,目前的最新版本为 ...
- go中sync.Once源码解读
sync.Once 前言 sync.Once的作用 实现原理 总结 sync.Once 前言 本次的代码是基于go version go1.13.15 darwin/amd64 sync.Once的作 ...
- 爬虫入门到放弃系列05:从程序模块设计到代理IP池
前言 上篇文章吧啦吧啦讲了一些有的没的,现在还是回到主题写点技术相关的.本篇文章作为基础爬虫知识的最后一篇,将以爬虫程序的模块设计来完结. 在我漫(liang)长(nian)的爬虫开发生涯中,我通常将 ...