一、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 ...
随机推荐
- Eclipse调试时附加匹配版本的JAR包源码:Edit Source Loopup
- 换一个思路压缩图片,RGB转YUV
一般的压缩方案 做移动平台,终究都是要考虑纹理压缩的问题 IOS/PVR平台上一般会选用PVRTC格式,这个格式压缩还是很给力. Android上设备种类很多,支持的格式各有不同.如果平台能支持下载前 ...
- 修改eclipse中包的显示结构为树形
- 也说php从mysql数据库通过服务器端json返回数据出现乱码问题
我最近需要用js和json与mysql数据库做一个两级联动的下拉菜单,发现当从数据库中返回的是中文时客户端会出现乱码问题,经过在百度上查找终于找到了解决办法如下: while($row=$MySqlc ...
- 118、通过solid来定义不同边框的颜色,可以只定义一个边框的颜色
以下是设置按钮的右边框和底边框颜色为红色,边框大小为3dp,如下图: 在drawable新建一个 buttonstyle.xml的文件,内容如下: <?xml version="1.0 ...
- wcf序列化大对象时报错:读取 XML 数据时,超出最大
错误为: 访问服务异常:格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出 错: request.InnerException 消息是“反序 ...
- 如何彻底卸载Oracle
如何彻底卸载Oracle 因为Oracle在Windows下的卸载颇有一些麻烦,如果不能完全卸载有可能影响将来的再次安装!常规卸载方法是运行Oracle的自带的卸载程序,可遗憾的是我在卸载时总不能完全 ...
- unity自定义工具
using UnityEngine;using UnityEditor;using System.Collections;using System.IO;using System.Collection ...
- 使用 Google Web Fonts
Google Fonts 的介绍:Google Fonts 并不是简单的字体下载站 Google Fonts 地址:https://www.google.com/fonts 左上角可以输入查找的字体名 ...
- css内容样式属性
设置元素的最大高度.最小高度.最大宽度.最小宽度,用max-height.min-height.max-width.min-width. visibility:设置元素是否可见.visible和hid ...