什么是prolog
prolog是Programming in LOGic的簡寫,也就是使用邏輯的語言編寫程序。
prolog不是很高深的語言,相反,比較起其他的一些程序語言,例如c、basic等等語言, prolog是更加容易理解的語言。如果你從來沒有接觸過計算機編程,那么恭喜你,你將很容易的進入prolog世界。如果你已經是其他語言的高手,你就需要完全丟棄你原來的編程思路,否則是很難掌握prolog的。
邏輯思維在我們日常生活中比比皆是,prolog正是把這種思維用文字描述出來的計算機語言。嚴格來說,我不認為這是程序,因為它執行哪一步不是由人來確定的,好像是有了初級的“智能”。
例如使用prolog實現數獨、八皇后問題、漢諾塔問題時,可以發現不一樣的數學美。
一個例子
你定義一些規則,然后提出一個問題,它就會按這些規則來找答案。
比如有如下規則:
love(X,Y). % X love Y
%X和Y是lovers的條件是:X love Y并且Y love X
lovers(X,Y):-love(X,Y),love(Y,X).
然后提出以下事實:
love(zhangxueyou,wangfei).
love(zhangxueyou,zouhuimin).
love(wangfei,xietinfen).
love(zouhuimin,zhangxueyou).
love(xietinfen,wangfei).
love(xietinfen,zouhuimin).
love(liudehua,zouhuimin).
并且提出lovers的規則:
lovers(X,Y):-love(X,Y),love(Y,X).
接著提出問題
?-love(zhangxueyou,wanfei).
程序就會按照規則去找,并輸出結果
true.
如果我們想知道Who和wangfei是lovers,我們輸入
?-lovelovers(Who, wanfei).
得到結果
Who = xietingfeng.
Prolog是當代最有影響的人工智能語言之一,由于該語言很適合表達人的思維和推理規則,在自然語言理解、機器定理證明、專家系統等方面得到了廣泛的應用,已經成為人工智能應用領域的強有力的開發語言。
SWI prolog使用
1.下載及安裝
SWI prolog官網是http://www.swi-prolog.org/download/stable
根據自己情況選擇一個下載,我使用的windows (64 bit)的安裝包。
然后直接安裝,安裝過程中會提示將.pl文件與編譯器關聯(一般選擇與swipl?in目錄下的swipl-win.exe進行關聯)。
2. 開始第一個程序
新建一個文本文件,命名為first.pl(名字可隨意更改,只需保證后綴為.pl即可), 然后對其進行編輯。
在里面寫如下代碼后保存。
雙擊使用SWI-Prolog.exe打開:
在光標后輸入問題:love(zhangxueyou,wanfei). 按回車鍵后就會出現結果。
prolog特點:
1. prolog程序沒有特定的運行順序,其運行順序是由電腦決定的,而不是編程序的人。
從這個意義上來說,prolog程序不是真正意義上的程序。所謂程序就是按照一定的步驟運行的計算機指令,而prolog程序的運行步驟不由人來決定。它更像一種描述型的語言,用特定的方法描述一個問題,然后由電腦自動找到這個問題的答案。舉個極端的例子,你只需要把某個數學題目告訴它,它就會自動的找到答案,而不像使用其他的語言一樣,必須人工的編制出某種算法。
2. prolog程序中沒有if、when、case、for這樣的控制流程語句
前面已經說了,程序的運行方式有電腦自己決定,當然就用不到這些控制流程的語句了。通常情況下,程序員不需要了解程序的運行過程,只需要注重程序的描述是否全面,不過prolog也提供了一些控制流程的方法,這些方法和其他語言中的方法有很大的區別,希望你在以后的學習當中能夠融會貫通。
3. prolog程序和數據高度統一
在prolog程序中,是很難分清楚哪些是程序,哪些是數據的。事實上,prolog中的所有東西都有相同的形式,也就是說數據就是程序,程序就是數據。舉一個其他語言的例子:如果想用c語言編寫一個計算某個數學表達式的程序很簡單(比如:a=2+54),因為這是一段程序。但是如果想編寫一個計算用戶輸入的表達式的值的程序就很困難了。因為用戶輸入的是一段數據(字符串),如果想讓c語言處理這個字符串,就需要很多方面的技術。則正是因為在c語言中,程序和數據是分開的。而在prolog就不存在這個問題,你甚至可以很輕松的編寫處理其它prolog程序的程序。
4. prolog程序實際上是一個智能數據庫
prolog的原理就是關系數據庫,它是建立在關系數據庫的基礎上的。在以后的學習中你會發現它和SQL數據庫查詢語言有很多相似之處。使用prolog可以很方便的處理數據。
5. 強大的遞歸功能
在其它的語言中,你也許已經接觸過遞歸程序了。遞歸是一種非常簡潔的方式,它能夠有效的解決許多難題。而在prolog中,遞歸的功能得到了充分的體現,你甚至都會感到驚奇,遞歸居然又如此巨大的能力。
接下來,小編會邊學習邊給出prolog的相關教程,想學人工智能和AI的同學不要錯過了。