頭腦風暴-邏輯編程語言Prolog(01)

Prolog語言介紹

Prolog的英語意思就是Programming in logic(邏輯編程)橘蜜。與幾乎無所不能的C語言或是Python語言不同,Prolog不是一種通用語言几于,比如說它并不能夠寫出3D游戲引擎,它是建立在邏輯學的理論基礎之上的一種獨特的編程語言。不夠全能但它仍然是一種值得學習的語言嫂丙,它也被廣泛的應用在人工智能的研究中乖仇,它可以用來建造專家系統(tǒng)憾儒、自然語言理解、智能知識庫等乃沙。

如果你有一些基礎的邏輯學知識起趾,用Prolog解決一些邏輯推理問題方面會很方便,它能夠比其他的語言更快速地開發(fā)此類程序警儒。因為它的編程方法更象是使用邏輯的語言來描述問題训裆,而不是編寫程序,Prolog的程序和數(shù)據(jù)高度統(tǒng)一蜀铲,很難分清楚哪些是程序边琉,哪些是數(shù)據(jù)的。事實上记劝,prolog中的所有東西都有相同的形式变姨,也就是說數(shù)據(jù)就是程序,程序就是數(shù)據(jù)厌丑。這與我們常見的編程語言完全不是一種思維方式,prolog程序甚至沒有特定的運行順序定欧,其運行順序是由電腦決定的。

進入Prolog世界

我們選擇Prolog的一種實現(xiàn)怒竿,叫做SWI Prolog砍鸠。他的在Linux,Mac愧口,Windows下都可以安裝睦番,下載頁面,安裝很簡單這里就不介紹了耍属。SWI Prolog還支持中文來編程托嚣。我們先來看看什么邏輯編程,Prolog簡單到只有下面三種基本語句厚骗,

1. 事實

事實用來說明已知對象之間的關系或是對象的定義示启。在Prolog程序中,事實由謂詞名及用括號括起來的一個或幾個對象組成领舰。謂詞和對象可由用戶自己定義夫嗓。比如:

喜歡(小明,小紅)

這是一個名為喜歡的關系迟螺,表示對象小明對于小紅之間有喜歡的關系。

漫畫(哆啦A夢)

這是一個名為漫畫的表述舍咖,表示對象哆啦A夢是一種稱為漫畫的東西矩父。

有了事實的邏輯聲明就可以詢問Prolog系統(tǒng),來判斷誰喜歡誰排霉,或是什么是什么窍株。

我們這里先把上面兩句保存到一個文件里,文件名為like.pl攻柠。默認情況下球订,SWI-Prolog安裝后的可執(zhí)行文件名稱為“swipl”,我們打開當前目錄的命令行瑰钮,輸入swipl冒滩,成功的話會有類似如下顯示:

$ swipl
Welcome to SWI-Prolog (threaded, 64 bits, version 7.6.4)
SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software.
Please run ?- license. for legal details.

For online help and background, visit http://www.swi-prolog.org
For built-in help, use ?- help(Topic). or ?- apropos(Word).

?-

這里就打開了swi prolog的交互式環(huán)境,你可以在?-后面輸入命令浪谴,這種解釋型的交互環(huán)境很像Python开睡。

現(xiàn)在我們有一些事實儲存在like.pl文件里,我們先加載這個文件到Prolog系統(tǒng)里较店,我們可以輸入consult(like).士八,也可以用簡略的寫法[like]容燕,注意不要忘記句號梁呈,這里的意思是加載當前文件夾的叫做like的文件,如果正確這時系統(tǒng)會返回一個true蘸秘,代表命令執(zhí)行正確官卡。

?- [like].
true.

2. 查詢

現(xiàn)在我們可以對這個系統(tǒng)進行詢問了,這就是Prolog的第二類語句醋虏,查詢寻咒。如果現(xiàn)在我們詢問小紅是不是喜歡小明,會獲得一個false的答復颈嚼,因為事實里只有小明喜歡小紅毛秘。

?- 喜歡(小紅,小明).
false.

?- 喜歡(小明,小紅).
true.

在這個系統(tǒng)里,叫西游記的東西不是漫畫阻课,哆啦A夢才是漫畫叫挟。

?- 漫畫(西游記).
false.

?- 漫畫(哆啦A夢).
true.

只有這兩條事實有點少,下面我們增加幾條事實來測試限煞。
修改like.pl文件:

喜歡(小明,小紅).
喜歡(小王,小紅).
喜歡(小紅,小李).
喜歡(小李,小花).
喜歡(小花,小李).

重新加載like.pl文件:

?- [like].
true.

現(xiàn)在我們來學幾個新的查詢抹恳,我想看看有哪幾個人喜歡小紅。這里X是代表一個未知對象署驻。

?- 喜歡(X,小紅).
X = 小明 ;
X = 小王.

注意奋献,這里的X必須大寫健霹,在第一個答案出現(xiàn)后如果沒有結束,可以按;繼續(xù)瓶蚂,如果不想看其他答案糖埋,可以按回車結束。這里得到兩個答案窃这,小明和小王都喜歡小紅阶捆。

3. 規(guī)則

現(xiàn)在除了單一事實喜歡之外,還想要有一些組合的條件來表示某些事實钦听,這就是規(guī)則洒试。規(guī)則由幾個互相有依賴性的簡單句(謂詞)組成,用來描述事實之間的依賴關系朴上。

例如:戀人(X,Y):-喜歡(X,Y),喜歡(Y,X).
這里XY代表兩個不同的未知對象垒棋,表示如果X喜歡Y,而且Y也喜歡X痪宰,那么他們就是戀人關系叼架。繼續(xù)修改like.pl文件加入規(guī)則:

喜歡(小明,小紅).
喜歡(小王,小紅).
喜歡(小紅,小李).
喜歡(小李,小花).
喜歡(小花,小李).

戀人(X,Y):-喜歡(X,Y),喜歡(Y,X).

重新加載后繼續(xù)詢問系統(tǒng);

?- [like].
true.

?- 戀人(小紅,Y).
false.


?- 戀人(小李,Y).
Y = 小花.

?- 戀人(X,Y).
X = 小李,
Y = 小花 ;
X = 小花,
Y = 小李.

這里發(fā)現(xiàn)小紅沒有戀人衣撬,而這個系統(tǒng)中只有小李和小花互為戀人乖订。
是不是有點意思了伐庭,那這些關系中還能分析出什么呢烤镐?我們最后來找找誰和誰是情敵關系吧:

我們這么定義情敵:如果X喜歡Z,而且Z又不喜歡X柳譬,Z喜歡Y扛点,那么X和Y就是情敵哥遮。這么寫:情敵(X,Y):-喜歡(X,Z),not(喜歡(Z,X)),喜歡(Z,Y).,這里的not()代表否定一個規(guī)則陵究。

現(xiàn)在文件是這樣眠饮,編輯完后重新加載:

喜歡(小明,小紅).
喜歡(小王,小紅).
喜歡(小紅,小李).
喜歡(小李,小花).
喜歡(小花,小李).

戀人(X,Y):-喜歡(X,Y),喜歡(Y,X).
情敵(X,Y):-喜歡(X,Z),not(喜歡(Z,X)),喜歡(Z,Y).

小王的情敵是誰呢?我們不用自己去判斷了铜邮,來問問系統(tǒng)吧仪召!

?- 情敵(小王,Y).
Y = 小李.

看完上面的例子,不知道是否提起了你對prolog的興趣松蒜。prolog有許多不足之處扔茅,但是這并不影響它在邏輯推理方面的強大功能,不過最好的方法是使用某種通用語言和prolog結合牍鞠,通用語言完成計算咖摹、界面之類的操作,而prolog則專心實現(xiàn)邏輯運算的操作难述。例如:你編寫一個下棋程序萤晴,用prolog來讓電腦思考如何下棋吐句,而用別的語言來編寫界面。

到這里我們已經(jīng)大概體驗了這種邏輯編程語言店读,但這還遠遠不是Prolog的全部嗦枢,下一節(jié)我們將繼續(xù)學習這種強大的邏輯編程語言。

這里SWI Prolog提供了一個在線編程環(huán)境屯断,如果你不愿意安裝也能嘗試Prolog文虏,點擊Create aProgram,就可以新建程序了殖演,左側是程序區(qū)氧秘,右側下面是查詢區(qū)。


最新STEM知識分享請關注STEM實驗室 :www.steamlab.club

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末趴久,一起剝皮案震驚了整個濱河市丸相,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彼棍,老刑警劉巖灭忠,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異座硕,居然都是意外死亡弛作,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門华匾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來映琳,“玉大人,你說我怎么就攤上這事瘦真】罚” “怎么了黍瞧?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵诸尽,是天一觀的道長。 經(jīng)常有香客問我印颤,道長您机,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任年局,我火速辦了婚禮际看,結果婚禮上,老公的妹妹穿的比我還像新娘矢否。我一直安慰自己仲闽,他們只是感情好,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布僵朗。 她就那樣靜靜地躺著赖欣,像睡著了一般屑彻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顶吮,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天社牲,我揣著相機與錄音,去河邊找鬼悴了。 笑死搏恤,一個胖子當著我的面吹牛,可吹牛的內容都是我干的湃交。 我是一名探鬼主播熟空,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼搞莺!你這毒婦竟也來了痛阻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腮敌,失蹤者是張志新(化名)和其女友劉穎阱当,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糜工,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡弊添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捌木。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片油坝。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刨裆,靈堂內的尸體忽然破棺而出澈圈,到底是詐尸還是另有隱情,我是刑警寧澤帆啃,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布瞬女,位于F島的核電站,受9級特大地震影響努潘,放射性物質發(fā)生泄漏诽偷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一疯坤、第九天 我趴在偏房一處隱蔽的房頂上張望报慕。 院中可真熱鬧,春花似錦压怠、人聲如沸眠冈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜗顽。三九已至玄柠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诫舅,已是汗流浹背羽利。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刊懈,地道東北人这弧。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像虚汛,于是被迫代替她去往敵國和親匾浪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容

  • 什么是prolog prolog是Programming in LOGic的簡寫卷哩,也就是使用邏輯的語言編寫程序蛋辈。 ...
    小白frankie閱讀 3,204評論 0 3
  • 計算機編程語言可用于將指令傳達給計算機。它們基于某些句法和語義規(guī)則将谊,定義了編程語言中每種結構的含義冷溶。 現(xiàn)在我得到了...
    幻凌風閱讀 8,169評論 1 26
  • 飽讀詩書有何用? 至今依然內外空尊浓。 東疆遺珠寫網(wǎng)文逞频, 一年四季不放松。
    千秋筆閱讀 212評論 0 2
  • 年少時師父對我影響甚遠,常會給我講解經(jīng)文里的意思瓦堵,記得有一次師父問我:“你是怎么理解慈悲基协、舍得的?”我說:“慈悲就...
    叛逆女說故事閱讀 265評論 2 0
  • 她是個幸運的女孩。 母親是一代天后王菲刨疼,父親是著名演員李亞鵬泉唁。堪稱銜著金鑰匙出生的人揩慕。 可她也是個有缺陷的人——先...
    米湯泡米飯湯慧閱讀 300評論 0 1