摘 要:Prolog作為一種邏輯語言廣泛被運用于人工智能和專家系統(tǒng)中。不同于其他編程語言,Prolog類似自然語言的語法使它更容易被讀懂和理解,因此它被認為可能是一種出色的幫助學(xué)習(xí)邏輯知識的工具,一些科學(xué)家已經(jīng)通過實驗證明了Prolog甚至可以很好的被兒童運用和學(xué)習(xí),本文將延續(xù)這個思路,回顧過往實驗和結(jié)果,結(jié)合數(shù)學(xué)中幾何證明問題的例子,提出將Prolog運用于教育,尤其是面向非計算機專業(yè)相關(guān)人員進行邏輯相關(guān)問題的學(xué)習(xí)上的可能性和優(yōu)勢。
關(guān)鍵詞:Prolog;教育;幾何證明
中圖分類號:TP311.1 文獻標(biāo)識碼:A
Abstract:As a famous logic programming language,Prolog is widely used as an AI language and a great tool to design expert systems.Different from other programming languages,Prolog is expressed as a natural language,which makes it much easier to read and understand.Therefore,it is a great tool for teaching logic.Results of scientific experiments have shown that Prolog can even be used and learned by children.Following this idea,the paper reviews some previous experiments and their results.Combined with some examples of using Prolog to handle geometric proof problems,the paper proposes the possibilities and advantages of using Prolog in education,especially in the field of helping nonprogrammers and laypersons to study logic.
Keywords:Prolog;education;geometric proof
1 引言(Introduction)
Prolog是“Programming in Logic”的縮寫,這個名字的由來指明了這是一種邏輯編程語言。最初它經(jīng)常被運用于自然語言處理等研究領(lǐng)域,而現(xiàn)如今,它更多的和AI或計算語言學(xué)聯(lián)系在一起。盡管AI是目前最前沿的計算機技術(shù)之一,Prolog本身卻并未深奧的令人望而卻步,與此相反,它比人們想象中更容易理解。
第一個Prolog系統(tǒng)誕生于1972年,這也使它成為世界上最早的邏輯編程語言之一。之后Prolog在北美洲和歐洲被廣泛運用,在日本,Prolog也被賦予重任,被運用構(gòu)建第五代ICOT計算機系統(tǒng)。在智能系統(tǒng)研究領(lǐng)域,Prolog一直擔(dān)任著重要開發(fā)工具的角色。
2 文獻綜述(Literature review)
1980年,Prolog首次被Kowalski建議可以為兒童所用[1]。從1981年開始,有多個將Prolog運用在教育上的實驗項目陸續(xù)展開[2],1986年,一個命名為Prolog教育小組(PRG)建立,他們提供了多種工具組和系統(tǒng)供學(xué)校使用,以此進行了數(shù)個相關(guān)實驗[3]。1987年,Prolog被PRG的組織者之一Jon Nichol明確指出可以作為杰出的教育工具。
除了兒童教育,Peter Gibbins系統(tǒng)地介紹了如何和為何將Prolog運用于解決普遍的邏輯問題[4],Richard Spencer-Smith為這一論點提供了更多的理論支持[5]。James L.Hein在2009年提出,Prolog是解決離散數(shù)學(xué)問題的最好的工具之一[6]。眾所皆知,數(shù)學(xué)本身也是計算機科學(xué)的基礎(chǔ)課程,因此,Prolog也是教授計算機和編程語言的杰出工具[7]。
Prolog并不僅僅被運用在計算機學(xué)科,它已經(jīng)開始被拓展運用于其他工程類學(xué)科,中村教授也給出了多個運用Prolog展現(xiàn)化學(xué)過程和解決普通數(shù)學(xué)計算的例子[8]。1990年,一本名為《Prolog構(gòu)建的數(shù)學(xué)世界》的教材展現(xiàn)了大量運用Prolog學(xué)習(xí)和解決數(shù)學(xué)問題的實例,包括集合運算、拓撲空間等問題[9]。2011年,丁盤蘋通過基于本體的Prolog規(guī)則對幾何定義、定理和公理進行描述,使之能通過知識庫推理機來完成幾何定理證明[10]。在新系統(tǒng)中,Prolog經(jīng)常和專家系統(tǒng)一同被提起[11],專家系統(tǒng)可以提供和學(xué)生互動的脫離課堂式教學(xué)[12]。因為Prolog可以和基于知識的語義本體完美搭檔,這也使運用網(wǎng)絡(luò)教育系統(tǒng)收集知識,且在多個學(xué)術(shù)領(lǐng)域提供互動教學(xué)系統(tǒng)成為可能[13]。
3 Prolog與教育(Prolog and education)
3.1 教授Prolog的優(yōu)勢
教授學(xué)生Prolog有許多益處,而其中最突出的優(yōu)勢毫無疑問是可以提高學(xué)生們的邏輯思維。Prolog可以教授規(guī)范邏輯的概念,眾多的Prolog課程也選擇從教授規(guī)范邏輯開始。Prolog代表了編程語言的另一種形式:邏輯編程關(guān)注的是一個問題的邏輯定義或者描述[3]。所有的Prolog表達都被規(guī)定為一種叫做霍恩子句的形式,這是一種格式為“A if B and C”的子句。所有的事實和規(guī)則都被用這種形式的子句表達,這種形式的語句表達清晰,使用者非常容易理解其中的邏輯關(guān)系,此外簡潔的子句形式使得低年齡的學(xué)生可以輕松地掌握和編寫這些語句。
教授Prolog的另一個好處是它提供了一個良好的環(huán)境將知識點結(jié)構(gòu)化,它可以通過知識之間的關(guān)聯(lián)將許多知識點聯(lián)系成一個整體的知識塊,在掌握了基礎(chǔ)的編寫技巧之后,學(xué)生和老師都可以利用它將所教授學(xué)習(xí)或者感興趣的學(xué)科知識點改寫成子句。在這個過程中,學(xué)生可以更為透徹的了解這些知識點,并且理清這些學(xué)科知識點之間的關(guān)系。
最后,Prolog作為一種易于理解和起步學(xué)習(xí)的高級語言,教授Prolog有很大可能使剛開始接觸計算機領(lǐng)域的學(xué)生因為Prolog的易懂和易編寫而對該領(lǐng)域產(chǎn)生興趣。實驗顯示Prolog的學(xué)習(xí)曲線普遍呈現(xiàn)一種非常陡峭的角度,尤其在前期,學(xué)習(xí)收益顯著。此外,作為一種工具語言,Prolog也同樣適合計算機相關(guān)專業(yè)進階階段的學(xué)生,作為一種不同于傳統(tǒng)C語言、Java語言的語言進行拓展學(xué)習(xí)。
3.2 將Prolog運用于教學(xué)的優(yōu)勢
Prolog的一個特征就是它非常容易學(xué)習(xí)和被使用,它不需要任何編程或者語言基礎(chǔ)就能開始使用它。如果將Prolog用于教學(xué),在已經(jīng)擁有完整的知識塊的前提下,老師可以通過Prolog輕易地展示其中的邏輯和知識點間的關(guān)聯(lián)。此外老師也可以選擇自行添加子句來呈現(xiàn)希望教授的知識。作為一種高級語言,Prolog非常接近自然語言,這使它適合任何階段的學(xué)校學(xué)習(xí),同時它也適合任何學(xué)科的老師使用。它并不需要使用的老師擅長計算機,因此Prolog并不局限于計算機或者相關(guān)學(xué)科的課程教學(xué)使用,它也非常適合計算機技術(shù)或編程基礎(chǔ)一般的老師使用。只需要給出簡單易懂的軟件界面,老師就能夠通過非?;A(chǔ)的學(xué)習(xí)掌握錄入條件或知識點的方式,在未來課程不斷深入的過程中,也非常方便在任意時間由老師自行添加和更新知識點,它提供了一種開放簡便的構(gòu)建知識基礎(chǔ)的結(jié)構(gòu)。
及時反饋是Prolog的另一個優(yōu)勢。Prolog提供的互動性環(huán)境有助于提高學(xué)習(xí)效率,在學(xué)習(xí)過程中,如果能及時給出正確或者錯誤的反饋,將會激勵學(xué)生不斷嘗試和發(fā)現(xiàn)正確答案的積極性。
4 相關(guān)實驗(Relevant experiments)[3]
在1980年,Prolog第一次被認為可用作教學(xué)工具,Kowalski教授指出,將Prolog運用于課堂可以分為兩個階段,第一階段是教授學(xué)生通過Prolog學(xué)習(xí)邏輯知識,而第二階段是通過讓學(xué)生自行編輯邏輯語言以提高他們的邏輯思維能力,并使其能在其他學(xué)術(shù)領(lǐng)域表現(xiàn)更為突出。
約1982年,Jon Nichol在Exeter大學(xué)建立了Prolog學(xué)習(xí)小組,關(guān)注Prolog在教育教學(xué)運用中的進展。他們在之后的幾年內(nèi)完成了大部分的實驗,并在1988年發(fā)表了大部分研究結(jié)果。他們的實驗在多所學(xué)校進行,其中部分實驗歷時長達五年,為這個小組的核心研究課題——如何將Prolog用于教育提供了大量可靠的數(shù)據(jù)和信息。
在實驗開始前期,研究者們首先開始了一些小型實驗比較了top-down和bottom-up兩種教學(xué)方式哪種更加適合用于教授Prolog,top-down即首先給學(xué)生編寫好的語句讓學(xué)生從閱讀理解并且使用這些語句編寫的程序開始學(xué)習(xí),而bottom-up方式即直接教授給學(xué)生編寫Prolog語言的必要技能,讓學(xué)生們自行從零開始進行學(xué)習(xí)和編寫。這個實驗持續(xù)了六個月,最終得出了top-down的教學(xué)方式更加利于學(xué)生學(xué)習(xí)和掌握編程技能,也為Kowalski教授提出的兩個階段的教學(xué)方式提供了一定的實驗支持。
主體實驗由Geoff和Elizabeth主持。他們一共選取了317名五六年級的學(xué)生和117名十年級的學(xué)生參與了這個持續(xù)三年的實驗,以測試將Prolog作為課題學(xué)習(xí)媒介的可行性。他們完全參考了Kowalski教授的思路,首先使用Prolog作為輔助教學(xué)的媒介,同時也嘗試讓學(xué)生們掌握一定的Prolog編程技能。得益于本實驗的長周期和足量樣本,這一實驗得出了多個有用且可靠的結(jié)論。
長期的實驗結(jié)果證明了不同接收能力的孩子都能很好地接受Prolog課堂的知識輸出。盡管他們發(fā)現(xiàn)一些接收能力較弱的孩子需要一些額外的幫助,但這也僅僅發(fā)生在起步階段。即使將不同接收能力的孩子編入同一個小組也并不會在組里產(chǎn)生明顯的差距,當(dāng)接收能力強的孩子給接收能力弱的孩子提供幫助后,后者就很快上手并且很快追趕至平均水平。
實驗結(jié)果明確顯示了學(xué)生年齡和Prolog技能掌握程度之間的正相關(guān)。五六年級的學(xué)生都能掌握基本知識,而大部分六年級生已經(jīng)能夠理解其中的部分邏輯規(guī)律,并且利用部分規(guī)律,一部分六年級學(xué)生甚至已經(jīng)能夠自己創(chuàng)造規(guī)律語句,而十年級中的大部分學(xué)生都可以自己創(chuàng)造規(guī)律語句。簡言之,大部分學(xué)生都能很好的使用Prolog程序進行互動學(xué)習(xí),隨著年齡的增長,更多的學(xué)生可以由使用程序進步為掌握編程技能。
5 Prolog在特定學(xué)科,如數(shù)學(xué)學(xué)科中的運用
(The application of Prolog in a particular
subject:Mathematics)
5.1 基礎(chǔ)運算
雖然Prolog是一種邏輯工具,但是這并不代表它無法完成運算的工作。它和大部分編程軟件一樣,使用+、-、*、/表達加減乘除四種基礎(chǔ)運算符,此外也有特定的函數(shù)完成簡單運算,例如mad(a,b)表示取a/b后的余數(shù)。
Prolog也可以用來解決一些經(jīng)典的數(shù)學(xué)問題,例如中國學(xué)生熟知的問題:有兩個工人A和B在制造同一種玩具,每小時B制造的玩具數(shù)量是A的兩倍多3個,問題:如果A一小時可以制造20個玩具,B一小時可以制造多少個玩具?
這時我們需要設(shè)定一個分句:B_DoubleA_Add_3并且設(shè)定如下
B_DoubleA_Add_3(X,Y) : -Y is 2*X+3.
設(shè)定完成后,問題可以輕易的用以下語句解決:
?- B_DoubleA_Add_3(20,X).
5.2 代數(shù)證明問題
中村教授曾經(jīng)提出可以用Prolog教授一些自然數(shù)的基礎(chǔ)運算和推理問題。例如,“如果X是一個自然整數(shù),那么它的下一個整數(shù)必然是自然數(shù)?!边@個基本定理,我們可以用s(X)來代表下一個整數(shù),具體描述如下:
natural_number(s(X)):-natural_number(X).
如果我們添加一句natural_number(0).
那么這段Prolog語句可以用以表達出另一個定理:自然數(shù)是一個從0開始的整數(shù)。
當(dāng)使用者輸入:
-? natural_number(X).時,Prolog將首先回答,X=0。
但是之后的回答將依次為s(X)、s(s(X))而不是1、2、3。因為并沒有向Prolog提供s(X)=X+1這一規(guī)律,通過繼續(xù)向Prolog提供更多的規(guī)律,Prolog可以表達出更多的定理。
5.3 幾何證明問題
與處理代數(shù)問題相比,幾何問題顯得更為復(fù)雜一些,首先需要通過描述讓Prolog來判斷輸入的是哪一種幾何圖形。這時我們需要語義來幫助我們建立一個完整的數(shù)據(jù)庫。
首先,幾何問題需要被分為幾個大類,比如說,三角、線、點、角。這幾個大類中還能被分出多個分支,例如三角中有直角三角形、鈍角三角形等。
其次,我們需要定義一些特性,如表1所示就是對“長度”這一特性的定義。
當(dāng)完成了所有信息的輸入后,程序?qū)謩e對比每一個特征來做出自己的“判斷”。
以下是一個運用Prolog,將簡單的數(shù)學(xué)中三角形邊長問題轉(zhuǎn)換為Prolog程序的例子:
定理:三角形的兩邊之和大于第三邊。
三角形的三條邊長可以自由賦值,這里設(shè)定為小于10,方便學(xué)生計算,設(shè)定如下:
A is random(9)+1,% generates a random number between 1 and 10
B is random(9)+1,
C is random(9)+1,
當(dāng)程序開始時,學(xué)生會看到如下的問題:
1 ?- go.
三角形三條邊長分別為:a:1cm b:6cm c:4cm
它們可以組成一個三角形嗎?(請回答Yes或No)
可見在這組隨機產(chǎn)生的三條邊長中,a邊和c邊之和為5cm,并不大于第三邊6cm,因此B>=A+C,此時程序?qū){(diào)用相對應(yīng)的判斷語句如下:
triangleAnswer(A,B,C,'no',',因為邊長AC之和不大于第三邊B'):-
B>=A+C.
而當(dāng)隨機產(chǎn)生的ABC的長度可以構(gòu)成一個三角形時,程序?qū){(diào)用如下語句:
triangleAnswer(A,B,C,'yes',',因為任意兩邊之和都大于第三邊'):-
A
請問角C的度數(shù)是?
這時學(xué)生可以自行在運算后輸入答案,程序?qū)⑼瑯咏o出是否正確的回應(yīng)。當(dāng)面對更低年齡的學(xué)生時,可以在題干中給予提示,例如給出AB之和,直接讓學(xué)生進行減法運算。
同樣因為解釋的語句可以自由編寫,老師也可以通過編輯語句給予學(xué)生鼓勵,例如在回答正確后添加一些褒獎的語句,在回答錯誤后出現(xiàn)一些鼓勵的語句。
6 結(jié)論(Conclusion)
研究可知,Prolog是一種適合用于教育且同時適合被教授的語言,尤其在培養(yǎng)較低年齡學(xué)生的邏輯思維方面有著得天獨厚的優(yōu)勢,同時因為Prolog并非傳統(tǒng)編程語言,所以對學(xué)習(xí)者和使用者沒有編程基礎(chǔ)的要求。而在基礎(chǔ)較弱的學(xué)生學(xué)習(xí)過程中,根據(jù)Prolog學(xué)習(xí)小組的實驗結(jié)論,隨著使用者年齡的增長,年齡較大的使用者可以自行發(fā)掘邏輯關(guān)系,創(chuàng)造規(guī)律語句,在此基礎(chǔ)上,讓處于起步階段的學(xué)生首先使用Prolog已經(jīng)編譯好的程序進行計算練習(xí),學(xué)習(xí)例如幾何定理等知識,在之后的學(xué)習(xí)中讓學(xué)生逐漸向編輯語句、構(gòu)建邏輯關(guān)系的方向轉(zhuǎn)化,則有可能構(gòu)成一個較為完整的Prolog的學(xué)習(xí)過程,正如前文所說,出色的邏輯思維能為學(xué)習(xí)眾多科學(xué)學(xué)科和知識打下良好的基礎(chǔ),現(xiàn)如今,越來越多的兒童、低年級學(xué)生已經(jīng)加入了學(xué)習(xí)編程的行列,Prolog作為一種易于理解的編程語言,同樣是一個很好的選擇。同時,在高層次領(lǐng)域,基于專家系統(tǒng)的智能教學(xué)系統(tǒng),和基于語義的幾何知識庫[14]的搭建等都是可以深入研究的方向。
參考文獻(References)
[1] J. R Ennals.Beginning micro-PROLOG[M].New York:Harper & Row,1983.
[2] Cumming,G.,Abbott,E.Prolog as a medium for learning in the classroom[C].Proceedings of the IFIP TC 3.1st European Conference on Computers in Education―ECCE 88,Lausanne,Switzerland,24-29. July,1988,North-Holland:IFIP Technical Committee 3,1988:317-321.
[3] Nichol J.,Briggs J.,Dean,J..PROLOG,Children and Students[M].London:Kogan Page,1988.
[4] Gibbins,P..Logic with PROLOG[M].Oxford:Oxford University Press,Inc.,1988.
[5] Richard Spencer-Smith.Logic and PROLOG[M].New Jersey: Prentice-Hall,1991.
[6] Hein J L..Prolog Experiments in Discrete Mathematics,Logic,and Computability[R].Portland:Portland State University,2009.
[7] Christiansen H..Prolog as description and implementation language in computer science teaching[C].Ducassé,Mirelle.Proceedings of The First International Workshop on Teaching Logic Programming-TeachLP.Saint Malo:Link?ping electronic conference proceedings,2004:43-54.
[8] 中村 治.Prolog プログラミング[R].橫濱:高知大學(xué),2011.
[9] 飯高 茂.Prologで作る數(shù)學(xué)の世界―Prologそして集合-位相-群[M].新宿:朝倉書店,1990.
[10] 丁盤蘋.基于本體和Prolog規(guī)則的幾何定理證明的研究[D].電子科技大學(xué),2012.
[11] Mcfarland T D,Parker R.Expert systems in education and training[M].Englewood Cliffs:Educational Technology Publications,1990.
[12] Colbourn C J,Light P H.Social interaction and learning using micro‐PROLOG[J].Journal of Computer Assisted Learning,1987,3(3):11.
[13] Peylo C,Teiken W,Rollinger C R,et al.An Ontology as Domain Model in a Web-Based Educational System for Prolog[C].Thirteenth International Florida Artificial Intelligence Research Society Conference.Palo Alto:AAAI Press,2000:55-59.
[14] 佘莉.基于語義的幾何學(xué)科知識平臺[D].中國科學(xué)院成都計算機應(yīng)用研究所,2006.
作者簡介:
王佳楠(1991-),女,碩士,助理實驗員.研究領(lǐng)域:數(shù)據(jù)庫技術(shù),管理信息系統(tǒng).