prolog语言介绍(一)
Prolog( Programming in logic ) 语言 是一种面向演绎推理的逻辑型程序设计语言。
Prolog语言的语法结构相当简单,但描述能力很强。例如,当事实和规则描述的是某一学科公理。那么问题就是待证的命题;当事实和规则描述的是某些数据和关系,那么问题就是数据查询语句;当事实和规则描述的是某些状态变化规律,那么问题就是目标状态。因此,Prolog语言是一种智能型程序设计语言。
Prolog程序没有特定的运行顺序,程序运行顺序完全按照数理逻辑推导(消解法)的方式进行.而不是由编程序的人决定。Prolog是一种描述型语言,用特定的方法描述一个问题,然后由计算机自动找到这个问题的答案。举个极端的例子:当建立好事实和规则后,只需要把某个问题告诉它,它就会自动查找答案。
Prolog程序中没有if、case、for这样的控制流程语句。通常情况下,程序员不需要了解程序的运行过程,只需要注重程序的描述是否全面。不过Prolog也提供了一些控制程序流程的方法,这些方法和其他语言中的方法有很大区别。
Prolog语法
在Prolog中一共存在四种类型的语句:原子、数字、变量、复杂语句(结构)。原子和数字统称为常量;常量和变量统称为简单语句。
-
可使用的字符范围
- 大写字母:A-Z
- 小写字母:a-z
- 数字:0-9
- 特殊英文字符:_ , + , - , * , / , <, > , = , : , . , &, ~, (空格也是字符,但是不常用且不可见)
-
原子(Atoms)
- 由有效字符(大写字母、小写字母、数字和下划线)构成的字符串,并且以小写字母为开头;
- 使用单引号封装的字符列(可以使用空格符);
- 特殊字符组成的字符串;
- eg:@=,====》,;,:,-,等都是原子的;
- 一些特殊原子已经有预定义的含义
-
数字(Numbers)
在典型的Prolog程序中,实数并不是很有用武之地。但整数却很有用,例如在计算列表的元素数目之类的工作时候。Prolog中数字的表示很简单,没有什么特殊
-
变量(Variables)
- 由大写字母、小写字母、数字和下划线组成的字符串,并且开头字母必须是大写字母或下划线。
- ”_“是一个特例,它被称为匿名变量,这里不做详细介绍。
-
复杂语句(Complex Terms)
复杂语句由一个函子(functor,可以理解为函数名)和一个参数序列构成。参数序列放在小括号内,由英文逗号分隔,并且是放在函子后面。函子后面必须紧跟参数序列,中间不能有空格。函子必须是一个原子,变量不能用作函子。参数序列可以是任何类型的语句。
例如loves(vincent, mia)就是一个复杂语句,loves是函子,vincent和mia是参数序列;jealous(marsellus,W)也是一个复杂语句,但是其参数序列中包含了变量。
(注: 函子和谓词由一定区别,我的理解是:函子是谓词的名字,谓词包含了函子及其参数序列,是整个逻辑的实现统一体 )
复杂语句的定义还可以允许更为复杂的情况:在复杂语句中,可以内嵌其他复杂语句,也就是说,复杂语句允许递归。比如:hide(X, father(father(father(butch))))
复杂语句的参数个数称为元数(arity)。 比如,woman(mia)是一个元数为1的复杂语句,loves(vincent, mia)是一个元数为2的复杂语句。
元数对于Prolog很重要。Prolog允许定义函子相同但是元数不同的复杂语句,使用元数不同的函子定义谓词时,Prolog会认为这两个谓词是不同的。
当我们需要提及定义的谓词,介绍如何使用它们的时候(比如,在文档中),惯例是”函子/元数“这种形式 。
Prolog程序
Prolog程序一般由一组事实、规则和问题组成。问题是程序执行的起点,称为程序的目标。
事实、规则和问题都分行书写;规则和事实可连续排列在一起,其顺序可随意安排,但同一谓词名的事实或规则(即同一谓词的子句)必须集中排列在一起;问题不能与规则及事实排在一起,它作为程序的目标要么单独列出,要么在程序运行时临时给出。
还需说明的是,Prolog程序中的事实或规则一般称为它们对应谓词的子句
Prolog 程序的执行过程是一个(归结)演绎推理过程.其推理方式为反向推理,控制策略是深度优先且有回溯机制,具体实现方法是:自上而下匹配子句;从左向右选择子目标;(归结后)产生的新子目标总是插入被消去的目标处(即目标队列的左部).Prolog 的这种归结演绎方法被称为SLD(Linear resoluTIon with SelecTIon funcTIon for Definite clause)归结, 或 SLD 反驳—消解法。这样,SLD 归结就是 Prolog 程序的运行机理,也就是所谓的 Prolog 语言的过程性语义。