對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).
按回車鍵後就會出現結果。
至此,第一個程序完成。