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