Prolog教程 2
Prolog在英語中的意思就是Programming in LOGic(邏輯程式設計)。它是建立在邏輯學的理論基礎之上的, 最初是運用於自然語言的研究領域。然而現在它被廣泛的應用在人工智慧的研究中,它可以用來建造專家系統、自然語言理解、智慧知識庫等。同時它對一些通常的應用程式的編寫也很有幫助。使用它能夠比其他的語言更快速地開發程式,因為它的程式設計方法更象是使用邏輯的語言來描述程式。
從純理論的角度來講,Prolog是一種令人陶醉的程式語言,但是在這本書中還是著重介紹他的實際使用方法。
進入Prolog世界
和其他的語言一樣,最好的學習方法是實踐。這本書將使用Prolog的直譯器來向大家介紹幾個具體的應用程式的編寫過程。
首先你應該擁有一個Prolog的直譯器,你可以在免費prolog版本中找到它。關於直譯器的使用,請參閱相關的使用說明文件,建議使用amzi prolog 或者swi prolog來執行本網站的程式。
邏輯程式設計
什麼叫邏輯程式設計?也許你還沒有一個整體的印象,還是讓我們首先來研究一個簡單的例子吧。運用經典的邏輯理論,我們可以說“所有的人(person)都屬於人類(moral)”,如果用Prolog的語言來說就是“對於所有的X,只要X是一個人,它就屬於人類。”
moral(X):-person(X).
同樣,我們還可以加入一些簡單的事實,比如:蘇格拉底(socrates)是一個人。
person(socrates).
有了這兩條邏輯宣告,Prolog就可以判斷蘇格拉底是不是屬於人類。在Prolog的Listener中鍵入如下的命令:
?-mortal(socrates). (此句中的’?-'是Listener的提示符,本句表示詢問蘇格拉底是不是屬於人類。)
Linstener將給出答案:
yes
我們還可以詢問,“誰屬於人類?”
?-mortal(X).
我們會得到如下的答案:
X= socrates
這個簡單的例子顯示了Prolog的一些強大的功能。它能讓程式程式碼更簡潔、更容易編寫。在多數情況下Prolog的程式設計師不需要關心程式的執行流程,這些都由Prolog自動地完成了。
當然,一個完整的程式不能只包括邏輯運算部分,還必須擁有輸入輸出,乃至使用者介面部分。很遺憾,Prolog在這些方面做得不好,或者說很差。不過它還是提供了一些基本的方法的。下面是上述的程式一個完整的例子。
% This is the syntax for comments. % MORTAL - The first illustrative Prolog
program mortal(X) :- person(X). %在實踐中需要去掉前面的program 否則會報錯undifined procedure
person(socrates).
person(plato).
person(aristotle).
mortal_report:-
write(‘Known mortals are:’),nl, mortal(X), write(X),nl,
fail.
把下面程式碼存為 test.pl
mortal(X) :- person(X).
person(socrates).
person(plato).
person(aristotle).
mortal_report:-write(‘Known mortals are:’),nl, mortal(X), write(X),nl,fail.
用swi-Prolog開啟test.pl, 執行結果如下
?- mortal_report.
Known mortals are:
socrates
plato
aristotle
false.
2019-01-01 雪梨