prolog

    技术2022-05-18  37

    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的应用实例了。 你要坚信,它绝对不是那种只在实验室发挥作用的语言,之所以大多数人都不了解它,是因为它的应用范围比较特殊而已。


    最新回复(0)