一、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 ...
随机推荐
- css 文本显示点点点
今天有这个需求,百度获取到这个效果,记录下来. text-overflow :ellipsis; //让截断的文字显示为点点.还有一个值是clip意思是截断不显示点点 white-space : no ...
- 虚拟现实外包公司— VR开发编辑器意义重大 印证VR不仅服务于用户
三大引擎制造商 Unity Technologies .Epic Games 和Crytek 讨论在自家产品中添加附件,方便开发商在虚拟现实中创作游戏.这会对许多人造成影响,特别是早已进入虚拟现实的先 ...
- chmod、chown、chgrp的意思
文件权限管理chown->change owner 改变文件所有者chown test install.log -将install.log这个文件的所有者改为test用户 chgrp->c ...
- <<Numerical Analysis>>笔记
2ed, by Timothy Sauer DEFINITION 1.3A solution is correct within p decimal places if the error is l ...
- Alembic
Layers of the Library: AbcA(low) --> Abc --> AbcGeom(high) Container Hierarchy in Alembic ...
- R语言-数据结构
1.向量 向量是用来存储数值型.字符型或逻辑性数据的一维数组,用函数c()创建向量 a <- c(1,2,5,6,4) b <- c("one","two&q ...
- delphi中webbrowser的用法
WebBrowser1.GoHome; //到浏览器默认主页 WebBrowser1.Refresh; //刷新 WebBrowser1.GoBack; //后退 WebBrowser1.GoForw ...
- not子查询中有null值的时候 not in 会失效
not in子查询中有null值的时候 not in 会失效 但是 in 的子查询中有null的 不会失效
- Tomcat7启动log打印到INFO: At least one JAR was scanned for TLDs yet contained no TLDs.就停止不动了
环境: RHEL7,tomcat7.0.70 问题: 启动tomcat时,catalina.out日志打印到如下内容就停止不动了,也不报错 SEVERE: FarmWarDeployer can on ...
- ADO数据库操作
void CSjtestDlg::OnBnClickedButtonAdd() { // TODO: 在此添加控件通知处理程序代码 this->ShowWindow(SW_HIDE); DigA ...