一、prolog简介
一般来说,人工智能语言应具备如下特点:
1、具有符号处理能力(即非数值处理能力);
2、适合于结构化程序设计,编程容易;
3、 具有递归功能和回溯功能;
4、 具有人机交互能力;
5、 适合于推理;
6、既有把过程与说明式数据结构混合起来的能力,又有辨别数据、确定控制的模式匹配机制。
人工智能语言解决问题和传统方法的区别:
传统方法通常是把问题的全部只是以各种的模型表达在固定的程序中,问题的求解完全实在程序的指导下按着预先安排好的步骤一步步(逐条)执行。解决思路与冯诺依曼式计算机结构相吻合。
对于人工智能技术要解决的问题,往往无法把全部知识都固定在程序中,通常要建立一个知识库(包含事实和推理规则),程序根据环境和所给的输入信息以及所要解决的问题来决定自己的行动。所以它是在环境模式的指导下的推理过程。这种方式具有极大的灵活性、对话能力、有自我解释能力和学习能力。这种方法对解决一些条件和目标不大明确或不完备的非结构化问题比传统方法要好,它通常采用启发式、试探法策略来解决问题。
二、Prolog语言及其基本结构
尽管Prolog语言有很多版本,但是他们的核心部分都是一样的。Prolog的基本语句仅有三种:事实,规则和目标 三种类型的语句,且都用谓词表示。
Prolog 是陈述性语言,一旦给它提交必要的事实和规则之后,Prolog 就能使用内部的演绎推理机制,自动求解程序给定的目标。而不足要在程序中列出详细的求解步骤。
①、事实(facts)
事实是prolog中最简单的谓词,它和数据库中的记录十分相似。事实用来说明一个问题中已知的对象的性质和它们之间的关系。
事实语法结构如下:
pred(arg1,arg2...argN).
其中pred为谓词名称,arg1 是参数,共有N个,‘.’是所有prolog子句的结束符。
没有参数的谓词形式如下:pred.
参数可以是如下四种情况之一:
1、数(integer) 2、原子(atom,即:小写字母开头的字符串)3,变量(variable,大写字母开头,或者是 _ ) 4、结构(structure)
原子:
a,标识符原子:用小写字母或者是小写字母开头的小写字母数字串。用途:用于标志对象的名字和谓词或者是函数名。
b、字符串原子:用引号括起来的字符串
c、 特殊原子,一些特殊的符号
常量由数或者是原子构成
变量:
表示暂时不能或者是不需要命名的对象。用大写字母开头
特殊变量 "_" 空变量,表示我们对问题的某一个变量的值不关心。
结构:
函子:
用于构造prolog数据对象,一个结构是一个单一的客体。用于构造数据结构对象。
它由一个函子和一个或多个称之为分量的项的序列组成。
函子(分量1,分量2,.....,分量n)
其中分量也可以是结构
person(name(mary),addredd(street(zhongshang),number(20)))
表:
表是prolog语言中最常用的数据结构,它由一些有序分量组成。其长度可以任意。有序即表中的分量次序是有意义的。同样,表的分量可以是原子、结构、表。
[a,b,c]
表达式:
prolog提供各种运算,如算数运算符、比较运算符,可以是中缀形式也可以是函数式(前缀形式)
X+Y&Z
② 规则:
规则由几个互相依赖的简单句(谓词)组成。用来描述事实之间的依赖关系,如:因果关系,蕴含关系,对应关系
形式如下:规则由左边的表示结论的后件谓词和右边表示条件的前提谓词组成
例句:bird(X):-animal(X),has(X,feature)
P:-P1,P2,P3,P4....Pn.
:- 表示蕴含 个人理解 在逻辑学中充分条件 读作蕴含,由前件可以推出后件。
, 表示合取 即 所有条件都为真时,判断语句为真。
含义:若P1....Pn 均为真时,P为真。
horn子句:P1^P2^P3^P4^....Pn ——> P
规则也可以只有谓词名而没有参数。如start.
③ 问题(目标)
把事实和规则写入Prolog程序之后,就可以想Prolog询问有关问题的答案,询问的问题就是程序的运行目标。
目标的结构可以与事实或者是规则相同,可以使一个简单的谓词也可以使多个谓词的组合。目标分内、外两种,内部目标写在程序中,外部目标在程序运行时,由用户手工输入。
例句: ?- student(john)
?- 为prolog软件提示符, student(john)才是问题(目标)
一段代码(由SWI-Prolog编写)
test.pl 文件 love(zhangxueyou,wangfei).
love(zhangxueyou,zhouhuimin).
love(wangfei,xietingfeng).
love(zhouhuimin,zhangxueyou).
love(xietingfeng,wangfei).
love(xietingfeng,zhouhuimin).
love(liudehua,zhouhuimin).
loves(X,Y):-love(X,Y),love(Y,X). %恋人
rival_in_love(X,Y):-love(X,Z),not(love(Z,X)),love(Z,Y). %情敌
/* */多行注释
% 单行注释
双击test.pl文件,程序初始状态

“ ?- ”为提示符
输入一些问题(目标),查看程序运行结果

注意:和规则一样,问题后面也要加 “.”,同时 “;”为手动输入,表示继续查询。直到出现false。
prolog的特点:
1、prolog程序没有特定的运行顺序,其运行顺序由电脑决定而不是由编程序的人。
2、prolog没有if case else 等流程控制语句
3、prolog程序和数据高度统一
4、prolog实际上是一个智能数据库
5、强大的递归功能。
参考自:http://blog.csdn.net/mwsong/article/category/331639
一、prolog简介的更多相关文章
- MJExtension简介
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- The Art of Prolog:Advanced Programming Techniques【译文】
申明:此文为译文,仅供学习交流试用,请勿用作商业用途,造成一切后果本人概不负责,转载请说明.本人英语功力尚浅,翻译大多借助于翻译工具,如有失误,欢迎指正. 逻辑程序简介 逻辑程序是一组公理或规则,定义 ...
- python的简介与简单使用
简介: python的诞生 创始人:Guido van Rossum(荷兰人:吉多) 时间:1989年 特点: 1.简单明了,容易上手 2.多平台,`全面发展,平衡发展, 3.胶水语言,有大量的库 其 ...
- 【ProLog - 4.0 List】
[简介] 列表是Prolog编程中常用的一种重要的递归数据结构 列表是一个有限的元素序列 实例: 所有Prolog术语都可以是列表的元素,一个非空的List应该含有两个元素:头元素(Head)和尾元素 ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
- Cassandra简介
在前面的一篇文章<图形数据库Neo4J简介>中,我们介绍了一种非常流行的图形数据库Neo4J的使用方法.而在本文中,我们将对另外一种类型的NoSQL数据库——Cassandra进行简单地介 ...
- REST简介
一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. ...
- Microservice架构模式简介
在2014年,Sam Newman,Martin Fowler在ThoughtWorks的一位同事,出版了一本新书<Building Microservices>.该书描述了如何按照Mic ...
随机推荐
- ruby中 Win32ole的各应用操作方法(word excel Outlook IE)
Win32ole为标准Ruby发行版的一部分.Win32ole是访问Windows自动化的接口,可以让Ruby和Windows应用进行交互.具体说来Win32ole可以操作Word,Excel,IE, ...
- Visual Studio 14 初试,vNext
下了几天的VS 2014 .终于安装上了,花了好几天时间, VS 2014 下载地址, http://www.visualstudio.com/en-us/downloads/visual-stud ...
- Microsoft JScript 运行时错误: '$' 未定义
在运行MVC Music Store时Visual Studio 捕捉到此错误: Microsoft JScript 运行时错误: '$' 未定义 可能是引用的Scripts 引用出错,检查当前文件中 ...
- TensorFlow中max pooling层各参数的意义
官方教程中没有解释pooling层各参数的意义,找了很久终于找到,在tensorflow/python/ops/gen_nn_ops.py中有写: def _max_pool(input, ksize ...
- zzz
开放平台(TOP)的API是基于HTTP协议来调用的,开发者(ISV)可以直接使用TOP提供的官方SDK(支持多种语言,包含了请求的封装,签名加密,响应解释,性能优化等)来调用,也可以根据TOP的协议 ...
- yum:在Red Hat和Fedora中使用
1.列出已安装包: yum list installed--------->输出的结果可能在屏幕上一闪而过.所以最好把已安装包的列表重定义到一个文件中.然后是使用more/less查看 yum ...
- jQuery MiniUI开发系列之:Ajax处理超时、服务端错误
MiniUI所有组件的ajax交互,均使用标准.成熟的jQuery.ajax. 依赖于jquery ajax组件的完善性,我们可以拦截住每一次ajax请求处理. 比如,拦截ajax返回数据前,判断返回 ...
- 对想进入Unity开发新人的一些建议
提前声明:本文只是写给那些非职业游戏开发人士,只面向那些在校本科生,或已就业但无unity背景的同学们,当然是面对程序员方向的.本人刚工作也没多久,资历尚浅,之前在网上有一位同学让我谈谈一些想法,所以 ...
- Maven如何添加Oracle驱动包到本地仓库中
2016-05-28 http://note.youdao.com/yws/public/redirect/share?id=54cbe79c8948113ef492f946f7e027c8& ...
- AndroidManifest.xml的android:name是否带.的区别
android项目里面的AndroidManifest.xml,会有这样的定义 <activity android:name=".Main" ...