Prolog101(02)

通过上一章,大家可以知道,prolog是根据初始数据+逻辑规则,来进行逻辑判断一门语言。
程序员的重点,从如何进行逻辑判断,变成了如何制定逻辑规则。

我们了解一下prolog的一些基础知识:

% swipl -s hello.pl
% author neohope
 
%输入数据,like左边是人,右边是爱好
%请注意"."
like(wangwu,fishing).
like(wangwu,smoking).
like(wangwu,binglang).
 
like(jiliang,riding).
like(jiliang,smoking).
like(jiliang,soccer).
 
like(guosir,soccer).
 
like(linlin,riding).
like(linlin,smoking).
 
like(zhaowen,smoking).
 
like(hansen,sleep).
 
%描述关系:如果路人甲X,与路人乙Y,同时喜欢一种项目时Z,他们可以一起玩(paly)
%请注意"."
play(X,Y):-like(X,Z),like(Y,Z).

1、参数,参数可以是以下四种之一:
整数(integer):绝对值小于某一个数的正数或负数。
原子(atom):由小写字母开头的字符串。
变量(variable):由大写字母或下划线(_)开头。
结构(structure):在以后的章节介绍。
可用字符:A-Z;a-z;0-9;+-/\^,.~:.?#$等。

如:wangwu,fishing两个都是参数

2、谓词(predicate):Prolog语言的基本组成元素,可以是一段程序、一个数据类型或者是一种关系。
它由谓词名和参数组成。两个名称相同而参数的数目不同的谓词是不同的谓词。

如:like(arg1,arg2)只是一个谓词,like是谓词名,arg1,arg2是参数。

3、事实(facts):prolog中最简单的谓词。类似于关系数据库中的记录。

如:like(wangwu,fishing).这就是一个事实,wangwu喜欢钓鱼。

4、目标(goal):Prolog的查询工作是靠模式匹配完成的,查询的模板叫做目标。
如果有某个事实与目标匹配,那么查询就成功了,Prolog的解释器会回显’true.’。
如果没有匹配的事实,查询就失败了,解释器回显’false.’。

5、联合(unification):Prolog的模式匹配工作称为联合。
当数据库中只包括事实时,以下三个条件是使联合成功的必要条件。
a、目标谓词名与数据库中的某个谓词名相同。
b、这两个谓词的参数数目相同。
c、所有的参数也相同。

如:?- like(wangwu,riding).这个查询,因为没有like(wangwu,riding)这个事实,返回false。

6、绑定(binding):在使用带有变量的查询时(首字母大写),使用变量可以和任何的条目匹配。
联合成功之后,变量的值将和它所匹配的条目的值相同,这叫做变量的绑定。
当带变量的目标成功的和数据库中的事实匹配之后,Prolog将返回变量绑定的值。

如:?- like(wangwu,X).会返回wangwu喜欢的所有项目。

7、端口:Prolog的目标有四个端口用来控制运行的流程:调用(call)、退出(exit)、重试(redo)以及失败(fail)。
每个端口的功能如下:
call 开始使用目标搜寻子句。
exit 目标匹配成功,在成功的子句上作记号,并绑定变量。
redo 试图重新满足目标,首先释放变量,并从上次的记号开始搜索。
fail 表示再找不到更多的满足目标的子句了。

一开始使用Call端口进入目标,如果匹配成功就到了exit端口,如果失败就到了fail端口,如果用户输入分号,则又从redo端口进入目标。

8、规则:储存起来的查询。它的语法如下:head :- body,其中,
head 是谓词的定义部分,与事实一样,也包括谓词名和谓词的参数说明。
:- 连接符,一般可以读作‘如果’。
body 一个或多个目标。

如:play(X,Y):-like(X,Z),like(Y,Z).
head:play(X,Y)
:-
body:这个body有两个目标,like(X,Z),like(Y,Z)
规则名:play/2
描述:如果路人甲X,与路人乙Y,同时喜欢一种项目时Z,他们可以一起玩(paly)

Comments are closed.