一、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 ...
随机推荐
- 影响性能的关键部分-ceph的osd journal写
在前面一篇文章中,我们看到,当使用filestore时,osd会把磁盘分成data和journal两部分.这主要是为了支持object的transaction操作.我的想法是,ceph需要具有数据保护 ...
- win 8 安装 NET framework3.5 方法
win 8 预装的 NET framework 是 4.5 的,实际上很多程序要求的是 3.5,一般要另从网上下载的才能安装. 这里提供不需要从网上安装 .Net 3.5 的方法: 1.将 win 8 ...
- (AIDE)Android Eclipse JNI 调用 .so文件加载问题
背景:对于Android工程 Eclipse里编译好的.so文件放到 libs\armeabi下以后, 这样.so文件就可以打包到apk文件里,在apk装到手机上以后 在libs\armeabi下的. ...
- ASP.NET中控件命名规则
控件名 简写 控件名 简写 Web 窗体 Label lbl TextBox tb Button btn LinkButton lb HyperLink hl Repeator rpt ImageBu ...
- javascript的一点学习
最近用vue.js用的很爽,在全栈开发的路上一路狂奔,发现后台跟前台一起确实更有意义. 记录一个比较有意思的bug: 目标是对一个全局的paramList进行json格式化显示.代码借鉴了 http: ...
- 关于面向切面编程Aspect Oriented Programming(AOP)
最近学到spring ,出来了一个新概念,面向切面编程,下面做个笔记,引自百度百科. Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AOP主要实 ...
- Unable to find messages file 'cscui.dll' 问题解决
之前在工作机器上安装VS 2015卡死,结束进程,安装失败一直无法使用,昨天下班开着电脑把VS 2015卸载了,今天早上来,以前正确的项目现在生成都报错 "Unable to find me ...
- Spark读取Hbase的数据
val conf = HBaseConfiguration.create() conf.addResource(new Path("/opt/cloudera/parcels/CDH-5.4 ...
- Python 之 for循环中的lambda
第一种 f = [lambda x: x*i for i in range(4)] (如果将x换成i,调用时候就不用传参数,结果都为3) 对于上面的表达式,调用结果: >>> f ...
- XE6 & IOS开发之免证书真机调试(3):生成iPA文件并安装到其它苹果设备上(有图有真相)
网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 1.既然我们已经在真机上 ...