想成為更好的程序員嗎?學習Prolog語言吧
在計算機教學的課程中,有個傳統(tǒng)的現(xiàn)象,是否學過某一兩種的課程能夠成為判斷一個人能否深入理解一些計算機科學概念的分水嶺。盡管每個人都似乎能夠使用像Java這樣的語言進行編程,但一些有趣的證據(jù)現(xiàn)象表明,計算機科學中最復雜的概念還是class,其中蘊含了很多真正的智慧,能對你在C或Lisp語言的使用中提供很有用處的幫助。
在我的母校,一門關(guān)于Prolog的課程成了區(qū)分那些似是而非的和真正的計算科學學生之間的分界線。原因就在于,如果你的大腦能理解一個用Prolog寫成的Prolog解釋器,那么,你差不多就掌握了任何的編程概念。
然而,如今,學校里更感興趣的是那些市場化的語言,諸如Java、Python。就好像是他們在追求以最快的速度教會人們?nèi)绾尉幊?也許他們沒有意識到,但他們確實是在這樣做)。
關(guān)于Prolog的小事
Prolog如今不像以前那樣流行,想當年它曾經(jīng)是Lisp語言的強有力競爭者(至少對于歐洲的研究人工智能的人是這樣的)。然而,人們通常會認為學習Lisp更具優(yōu)勢,即使是從學習體驗上講。
可是我認為說Prolog也具有同樣的優(yōu)勢也不為過,有一些理由能說明為什么Prolog對大多數(shù)程序員來說仍然有很大的去學習的價值。
Prolog是純函數(shù)式語言。事實上,它是如此純粹,連它唯一能返回的值僅是字面上的true或false。在Prolog里,任何操作都和參數(shù)的綁定有關(guān),所以,沒有變量的修改更新——只有方法的調(diào)用。
這種語言提供了一種很簡單的訪問數(shù)據(jù)庫的機制。在Prolog里,數(shù)據(jù)庫被看作是一個可以根據(jù)某種規(guī)則來查看的信息的集合。通過這種方式,對外部數(shù)據(jù)的訪問只是被當做一種邏輯形式,不需要你做必須的操作來取回和讀數(shù)據(jù)。Prolog的這種模式減少了代碼和數(shù)據(jù)之間的阻抗,是一種很好的方式。
提供了一種簡單的方式來表達解釋性的程序。Prolog是一種基于規(guī)則匹配的語言,這種方式對于程序員是透明 的。它力圖通過其內(nèi)部的規(guī)則匹配引擎來滿足各個布爾型函數(shù)的需求。你可以簡單的把它想象成一個不確定的狀態(tài)機,在你需要它的時候能做出正確的事情,不需要 編程活動的介入。當然,這種機制在沒有其它條件幫助的情況在并不能解決所有的問題,但它是很必要的,它能把開發(fā)人員從思考事情如何做成中解脫出來,轉(zhuǎn)而集 中關(guān)注有哪些已經(jīng)被完成。
總之,我認為好的程序員應(yīng)該積極去發(fā)現(xiàn)不同方式的開發(fā)軟件的途徑。用一種不同的思維模式學習編程語言,比如邏輯性編程,這將會是對于傳統(tǒng)的思維過程 是一種精彩的挑戰(zhàn)。通過學習Prolog里程序是如何實現(xiàn)的,你能獲得一種更好的解決現(xiàn)實問題的思路,即使你需要實現(xiàn)的軟件是用C寫成的。
學習資料
關(guān)于Prolog的文獻并沒有多少,但有一本經(jīng)典的書叫做《The Craft of Prolog》。這本書放在那里我已經(jīng)好幾年沒動過了,但我最初開始研究這種語言時,它給我?guī)砹撕芏嗟目鞓?。在你使用這種語言來工作時,這本書仍然會成為你最好的Prolog知識的源泉。
原文鏈接:http://www.oschina.net/news/17379/why-learning-prolog-can-make-you-a-better-programmer
【編輯推薦】