【概述】

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 基础语法与概念】的更多相关文章

  1. swift3.0基础语法

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

  2. swift3.0基础语法(2)

    变量/常量,元组声明 var aaa = 0;//声明变量aaa 首次赋值时自动解析为Int类型 var aaa:Int = 0;//声明Int类型变量aaa let aaa = 0;//声明常量aa ...

  3. ECMAScript 5.0 基础语法(上)

    银子: 一般来说,一门编程语言的基础语法都是大同小异的.比如,python的基础语法,包括:数据类型,变量,作用域,运算符,流程控制(if...else...语句),循环,编码,数据类型的操作(增删改 ...

  4. ① Python3.0基础语法

    稍微了解一下py2.0和py3.0的区别,Py3.0在设计的时候,为了不带入过多的累赘,没有考虑向下兼容低版本的Py2.0.而在低版本中Py2.6作为过渡版,基本使用Py2.x的语法和库,同时考虑Py ...

  5. Swift3.0基础语法学习<二>

    对象和类: // // ViewController2.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © ...

  6. Vue 2.0基础语法:系统指令

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Vue初体验 新建一个空的项目,引入vue.js文件.写如下代码: &l ...

  7. Swift3.0基础语法学习<一>

    // // ViewController.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © 2016年 ...

  8. 【Prolog - 2.0 基础应用】

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

  9. ECMAScript 5.0 基础语法(下)“稍微重点一点点”

    接上篇 七.常用内置对象(复杂数据类型)(重点) (1)数组Array 创建:例  var colors = ['red','blue','green']       #推荐这样,因为简单粗暴 或:v ...

随机推荐

  1. multi selects & mutually exclusive

    multi selects & mutually exclusive 互斥 selects import React, { useState, // useEffect, // useRef, ...

  2. Node.js & LTS

    Node.js & LTS 2020 https://nodejs.org/en/about/releases/ https://raw.githubusercontent.com/nodej ...

  3. NGK引入反量子加密系统来应对量子计算攻击

    当前,区块链和分布式账本技术已有了长足发展并广泛应用与多种场景中,原因在于其提供透明性,冗余性和问责性的能力.就区块链而言,此类特征是通过公钥加密和哈希函数提供的.但是,随着量子计算机技术的发展和量子 ...

  4. 详解SSH 框架中对象调用流程

    摘要:SSH=Struts+Spring+Hibernate SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是目前较流行的一种Web应用程序开源集成框架,用 ...

  5. 【springboot读取配置文件】@ConfigurationProperties、@PropertySource和@Value

    概念: @ConfigurationProperties : 是springboot的注解,用于把主配置文件中配置属性设置到对于的Bean属性上 @PropertySource :是spring的注解 ...

  6. HTTP/1.1报文详解

    本文为<三万长文50+趣图带你领悟web编程的内功心法>第三个章节. 3.HTTP/1.1报文详解 在RFC2616中心详细的描述了HTTP/1.1[1]的报文,感兴趣的朋友也可以前往阅读 ...

  7. Svelte 极简入门

    ​弹指之间即可完成.   注意:原文发表于 2017-8-7,随着框架不断演进,部分内容可能已不适用.     Svelte 是一种新型框架.   以往我们要引入一个框架或者类库,可以通过在页面上放置 ...

  8. virtualbox-centos扩容

    virtualbox-centos扩容 版本信息 virtualbox:版本 6.1.4 r136177 (Qt5.6.2) centos:CentOS Linux release 7.7.1908 ...

  9. 探索 .NET Core 依赖注入的 IServiceProvider

    在上一篇文章中,我们学习了Microsoft.Extensions.DependencyInjection中的IServiceCollection,包括服务注册转换为ServiceDescriptor ...

  10. 使用CSS计数器美化数字有序列表

    在web设计中,使用一种井井有条的方法来展示数据是十分重要的,这样用户就可以很清晰的理解网站所展示的数据结构和内容,使用有序列表就是实现数据有组织的展示的一种简单方法. 如果你需要更加深入地控制有序列 ...