对Prolog的初步了解
刚接触Prolog,对其能做的事甚感兴趣。
严格来说,我不认为这是程序,因为它执行哪一步不是由人来确定的,好像是有了初级的“智能”。
你定义一些规则,然后提出一个问题,它就会按这些规则来找答案。
比如有如下规则:
father(X,Y). % X是Y的father
%X是Z的grandfather的条件是:X是Y的father并且Y是Z的father
grandfather(X,Z) :- father(X,Y),father(Y,Z).
然后提出以下事实:
father(tom,jerry).
father(jack,tom).
接着提出问题
?-grandfather(Who, jerry). % 谁是jerry的grandfather
程序就会按照规则去找,并输出结果
Who= jack .
是不是给人一种新奇的感觉,程序竟然能自己找答案!
但现在用Prolog人工智能的并不多,肯定有其原因,所以我打算细细探究一番。
开发软件介绍
龙涎在其博客中介绍了七种Prolog的编译器/解释器。我在Win7 64位系统上试了三种工具,VisualProlog, Amzi Prolog和SWI prolog。只有Visual Prolog和SWI prolog能正常运行,Amzi Prolog一直出问题,原因还未查到。
Visual Prolog有较好的IDE,但是编程时需要对谓词以及数据类型进行声明,较为复杂和繁琐。而SWI prolog则要简单得多,只需说明规则和事实,然后提出问题即可。下面说一下SWI prolog如何使用。
SWI prolog使用
1.下载及安装
SWI prolog官网是http://www.swi-prolog.org/
Windows各种版本的下载地址是http://www.swi-prolog.org/download/daily/bin/
根据自己情况选择一个下载,我使用的w64pl-2014-12-09.exe
然后直接安装,安装过程中会提示将".pl"文件与编译器关联(一般选择与swipl\bin目录下的swipl-win.exe进行关联)。
2. 开始第一个程序
新建一个文本文件,命名为"first.pl"(名字可随意更改,只需保证后缀为.pl即可), 然后对其进行编辑,我是用的是Notepad++.
在里面写如下代码后保存。
/*****************************************************************************/
% 规则
% father(X,Y). % X是Y的father
% X是Z的grandfather的条件是:X是Y的father并且Y是Z的father
grandfather(X,Z) :-
father(X,Y),father(Y,Z).
% 事实
father(tom, jerry).
father(jack, tom).
/*****************************************************************************/
之后直接双击" first.pl ",会出现一个对话窗口,如下所示:
在光标后输入问题:grandfather(Who, jerry).
按回车键后就会出现结果。
至此,第一个程序完成。