现在的位置: 首页 > 综合 > 正文

prolog

2013年10月05日 ⁄ 综合 ⁄ 共 1869字 ⁄ 字号 评论关闭

prolog是Programming in LOGic的缩写,意思就是使用逻辑的语言编写程序。
prolog并不是很高深的语言,相比c,c++来说prolog更象是个玩具。
所以说prolog是种很好玩的语言。
下面通过个简单的例子来让大家对prolog有个初步的概念。

xietingfeng.pro

father(xiexian,xietingfeng).
mather(dibola,xietingfeng).

father(xiexian,xietingting).
mather(dibola,xietingting).

father(xietingfeng,lucas).
mather(zhangbozhi,lucas).

parents(X,Y) :- father(X,Z),mather(Y,Z).

childs(X,Y) :- father(X,Y).
childs(X,Y) :- mather(X,Y).

grandfather(X,Y) :- father(X,Z),father(Z,Y).

grandmather(X,Y) :- mather(X,Z),father(Z,Y).

上面这十几行就是全部的代码。
先解释下每句的含义。
father(xiexian,xietingfeng).  
这样的语句在prolog中称为事实。这句含义就是:谢贤是谢霆锋的父亲。
mather(dibola,xietingfeng).  
这样的语句在prolog中称为事实。这句含义就是:狄波拉是谢霆锋的母亲。

接下来的几句类似,分别表示:
谢贤是谢婷婷的父亲。
狄波拉是谢霆锋的母亲。
谢霆锋是lucas的父亲。
张柏芝是lucas的母亲。

这些事实是prolog进行推理的基础。

parents(X,Y) :- father(X,Z),mather(Y,Z).
这样的语句在prolog中称为规则,
这句含义就是:如果X和Y是夫妻的话,那么必然存在一个孩子Z,使得X是Z的父亲,并且Y是Z的母亲。(呵呵)

接下来的几个也都是规则。
childs(X,Y) :- father(X,Y).
childs(X,Y) :- mather(X,Y).
表示如果Y是X的孩子,那么X必然是Y的父亲或者母亲。

grandfather(X,Y) :- father(X,Z),father(Z,Y).
表示如果X是Y的爷爷,那么父亲X的孩子Z必然是Y的父亲。

grandmather(X,Y) :- mather(X,Z),father(Z,Y).
表示如果X是Y的奶奶,那么母亲X的孩子Z必然是Y的父亲。

用prolog编程的感觉很特别,就是象是用自然语言来描述一样,一切都很自然。

下面运行上面这段代码看看实际效果:

查询一,查查谢霆锋的父亲?

?- father(X,xietingfeng).

X = xiexian ;
no

我们得到了结果xiexian,并且仅有这一个结果(呵呵)

查询二,查查狄波拉有哪几个孩子?

?- mather(dibola,X).

X = xietingfeng ;

X = xietingting ;
no
?-

得到2个X,分别是谢霆锋和谢婷婷,全中

查询一和二都是对简单的事实的查询。

查询三,查看有哪几对夫妻?

?- parents(X,Y).

X = xiexian
Y = dibola ;

X = xiexian
Y = dibola ;

X = xietingfeng
Y = zhangbozhi ;
no
?-

结果是三对,不过有一对是重复的,至于为什么会重复,大家自己思考吧。

查询四,张柏芝和谁是夫妻?

?- parents(X,zhangbozhi).

X = xietingfeng ;
no
?-

恩,张柏芝的老公是谢霆锋。

查询五,lucas的爷爷是谁?

?- grandfather(X,lucas).

X = xiexian ;
no
?-

是的,lucas的爷爷就是,lucas的父亲的父亲谢贤。

上面这几个查询是对规则的查询。

我们还可以增加其他的规则,
比如兄弟姐妹,条件是有相同的父亲和母亲。
或者叔叔阿姨,条件是与孩子的父亲或者母亲是兄弟姐妹。
一切都是这么的自然和轻松。

我在这仅仅介绍还有着这么一门有趣的语言,感兴趣的同学可以查查相关资料。
最后引用下其他人对prolog的评价:

prolog很适合于开发有关人工智能方面的程序,例如:专家系统、自然语言理解、定理证明以及许多智力游戏。
曾经有人预言prolog将成为下一代计算机的主要语言,虽然这个梦想目前还很难实现,不过世界上已经有许多prolog的应用实例了。
你要坚信,它绝对不是那种只在实验室发挥作用的语言,之所以大多数人都不了解它,是因为它的应用范围比较特殊而已。

抱歉!评论已关闭.