一、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 ...
随机推荐
- HelloWorld!
爪哇岛上程序猿,5载忙忙未等闲, 醉里挑灯秒登VPN解决Bug,梦里手撕产品战PM: 但行好事,莫问前程, 泰山崩于前,我依然沐浴更衣焚香沏茶: ...
- 服务端性能测试工具校验v1.0
性能测试工具对服务端进行并发测试时,如果工具本身问题或异常就会造成真实并发与实际并发有差距,要测试10000/S并发的性能结果实际到达服务端的并发达不到95%,这样的测试无效. 所以给大家共享,我做的 ...
- PHP如何通过CURL上传文件
PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以“@”开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变 ...
- vs2010下C++调用lib或dll文件
注: DLL:表示链接库,包含dll,lib文件: dll: 表示my.dll文件 lib: 表示my.lib文件 C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1 设置工程的 ...
- [转载]《民航科技》2012年4月专家论坛:程延松《关于中国民航SWIM框架及技术实现探讨》
专家介绍:程延松,现任成都民航空管发展有限公司总经理,理学博士,高级工程师,长期从事空管技术研究和产品研发工作,作为课题负责人,参与了国家863计划.国家科技支撑计划.国家空管委重点课题.民航局重点课 ...
- linux命令-cp/scp {拷贝}
一 命令解释 名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... directory 命令参数: -a 尽可能 ...
- [转]linux sort,uniq,cut,wc命令详解
sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...
- [转]jquery getJSON 数据联动(采用序列化和反序列化获取数据) .
<html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> ...
- 好用的一个从SharePoint导出小工具
1. 输入 Site Url(Site Collection), 然后点"load"按钮 2.选择Web后,点选需导出的文档库,然后点"Next"按钮 ...
- OGC学习课程
1.引言 由于项目需要,需要学习OGC相关地图标准,包括WMS.WFS.GML.SLD等,只是国内相关书籍大家都懂的,特向Google大师请教,得一秘籍<Open Web Mapping> ...