初識Prolog

什么是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的同學不要錯過了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • TITLE: 編程語言亂燉 碼農最大的煩惱——編程語言太多。不是我不學習,這世界變化快! 有時候還是蠻懷念十幾、二...
    碼園老農閱讀 5,374評論 2 35
  • 海市蜃樓,不過是真實物像經光的作用而產生的幻影。在感情中,難道還有這海市蜃樓? 室友和新交一個月的男朋友又...
    坐檀聆語閱讀 467評論 0 0
  • 可能此文會讓人覺得小題大作了些。 這幅照片拍于西湖文化廣場,那時剛下班,落日余輝處,一老一少。 從想到要買彩色鉛...
    小含歌閱讀 830評論 7 3
  • 1、ssh-keygen 可用來生成ssh公鑰認證所需的公鑰和私鑰文件。第一步 2、第二步在遠程主機上設置認證文件...
    瘋狂的冰塊閱讀 516評論 0 0