叽叽喳喳,嘻嘻哈哈

导航

一、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

 

posted on 2016-12-19 20:45  叽叽喳喳,嘻嘻哈哈  阅读(8891)  评论(0编辑  收藏  举报