首先我們先了解什么是人工智能語言
人工智能(AI)語言是一類適應(yīng)于人工智能和知識(shí)工程領(lǐng)域的、具有符號處理和邏輯推理能力的計(jì)算機(jī)程序設(shè)計(jì)語言。能夠用它來編寫程序求解非數(shù)值計(jì)算、知識(shí)處理、推理、規(guī)劃、決策等具有智能的各種復(fù)雜問題。典型的人工智能語言主要有LISP、Prolog、Smaltalk、C++等。
一般來說,人工智能語言應(yīng)具備如下特點(diǎn):
?具有符號處理能力(即非數(shù)值處理能力);
?適合于結(jié)構(gòu)化程序設(shè)計(jì),編程容易;
?具有遞歸功能和回溯功能;
?具有人機(jī)交互能力;
?適合于推理;
?既有把過程與說明式數(shù)據(jù)結(jié)構(gòu)混合起來的能力,又有辨別數(shù)據(jù)、確定控制的模式匹配機(jī)制。
人們可能會(huì)問,用人工智能語言解決問題與傳統(tǒng)的方法有什么區(qū)別呢?
傳統(tǒng)方法通常把問題的全部知識(shí)以各種的模型表達(dá)在固定程序中,問題的求解完全在程序制導(dǎo)下按著預(yù)先安排好的步驟一步一步(逐條)執(zhí)行。解決問題的思路與馮。諾依曼式計(jì)算機(jī)結(jié)構(gòu)相吻合。當(dāng)前大型數(shù)據(jù)庫法、數(shù)學(xué)模型法、統(tǒng)計(jì)方法等都是嚴(yán)格結(jié)構(gòu)化的方法。
對于人工智能技術(shù)要解決的問題,往往無法把全部知識(shí)都體現(xiàn)在固定的程序中。通常需要建立一個(gè)知識(shí)庫(包含事實(shí)和推理規(guī)則),程序根據(jù)環(huán)境和所給的輸入信息以及所要解決的問題來決定自己的行動(dòng),所以它是在環(huán)境模式的制導(dǎo)下的推理過程。這種方法有極大的靈活性、對話能力、有自我解釋能力和學(xué)習(xí)能力。這種方法對解決一些條件和目標(biāo)不大明確或不完備,(即不能很好地形式化,不好描述)的非結(jié)構(gòu)化問題比傳統(tǒng)方法好,它通常采用啟發(fā)式、試探法策略來解決問題。
那么Lisp和Prolog哪個(gè)更值得學(xué)習(xí),哪個(gè)功能更強(qiáng)大
自從五十年代麻省理工學(xué)院研制出LlSP以來,LISP一直是美國的主要人工智能語言。Prolog是七十年代初在歐洲研制出來的,為歐洲人工智能研究者所選用的語言。此外,日本第五代機(jī)計(jì)劃也選用Prolog作為它的軟件開發(fā)語言。在加利福尼亞州Calabasas的Hughes研究所Corporate人工智能中心幫助開發(fā)內(nèi)部專家系統(tǒng)的老科學(xué)家Douglas Partridge 預(yù)言,“這是一個(gè)復(fù)雜的問題,它所牽涉的許多事情,即使不影響八十年代后幾年,也會(huì)影響下五年的工業(yè)?!彼J(rèn)為,以Prolog 及其方言為代表的邏輯程序設(shè)計(jì)正潛入美國人工智能領(lǐng)域。但是,他懷疑,這種語言能否“與人們在研制專家系統(tǒng)時(shí)要用的問題求解方法一致。
LISP的許多鼓吹者很不相信Prolog。他們難以捉摸日本人為什么選用Prolog開發(fā)第五代機(jī)的軟件。有人說,“日本人犯了一個(gè)嚴(yán)重的錯(cuò)誤。Prolog 是研究問題的好工具,它太受其先天結(jié)構(gòu)的限但對一些重要應(yīng)用,
制。”越來越多的美國人轉(zhuǎn)向Prol0B這一事實(shí)表明,持這種態(tài)度是由于一般錯(cuò)誤地理解了Prolog與邏輯程序設(shè)計(jì)。有些研究人員花了數(shù)年時(shí)間學(xué)習(xí)LSP,因此對它很有感情。
兩種語言并非都人人中意,避開lisp與prolog之爭不談,對這兩個(gè)語言的常處于短處的看法是一致的。開發(fā)prolog軟件的Quintus計(jì)算機(jī)公司軟件技術(shù)董事長William Kornfeld 說,“prolog用起來很簡單,用他編程要比用lisp容易得多。Lisp是一個(gè)非常復(fù)雜的語言,要求程序員極其熟練”然而他指出,在最初設(shè)計(jì)prolog的時(shí)候,某些決策限制了他所擅長處理的問題類....”。關(guān)于Lisp和Prolog區(qū)別以及爭議我將在下文進(jìn)行分析。
關(guān)于LISP語言
(1)LISP具有和圖靈機(jī)相同的(也就是理論上最高的)計(jì)算能力;在計(jì)算機(jī)科學(xué)的可計(jì)算理論中,人們已經(jīng)證明遞歸函數(shù)和圖靈機(jī)具有相同的(也就是理論上最高的)計(jì)算能力,通常指的是自然數(shù)集上的遞歸函數(shù)。這個(gè)結(jié)論對符號集上的遞歸函數(shù)也成立。J.McCarthy在LISP中設(shè)計(jì)了一套符號處理函數(shù),它們具有符號集上的遞歸函數(shù)的計(jì)算能力,因此原則上可以解決人工智能中的任何符號處理問題。
(2)數(shù)據(jù)類型的唯一性,程序與數(shù)據(jù)的一致性;LISP的數(shù)據(jù)類型和句法結(jié)構(gòu)簡單,甚至簡單到具有唯一性和一致性:其數(shù)據(jù)和程序的表現(xiàn)形式是一樣的, 都是用S-表達(dá)式一種形式?;镜臄?shù)據(jù)結(jié)構(gòu)是表(表是S-表達(dá)式的特例)。
(3)數(shù)據(jù)和程序的 等價(jià)性;LISP的數(shù)據(jù)和程序不僅類型一致,而且作用也等價(jià);即:程序可作為數(shù)據(jù)被處理,數(shù)據(jù)也可作為程序來執(zhí)行。
(4)LISP一切功能由函數(shù)來實(shí)現(xiàn),程序的運(yùn)行就是求值;LISP程序的通常形式是一串函數(shù)定義,其后跟著一串帶有參數(shù)的函數(shù)調(diào)用,函數(shù)之間的關(guān)系只是在調(diào)用執(zhí)行時(shí)才體現(xiàn)出來。
(5)LISP語言的控制結(jié)構(gòu)以遞歸為主;大多數(shù)語言使用的控制結(jié)構(gòu)是以循環(huán)為主的,有的程序語言允許遞歸,而LISP以遞歸形式為主。遞歸是LISP能力的源泉。當(dāng)然現(xiàn)在LISP也有循環(huán)結(jié)構(gòu)和迭代。(6)原子可以有任意多個(gè)值(特性值);LISP非常重要的一個(gè)特點(diǎn)是每個(gè)文字原子許多特性,每個(gè)特性有一個(gè)特性表及對應(yīng)的特性值。由于原子的多值性給使用者帶來很多方便,給問題表示帶來好處,使LISP很好用。
(7)LISP具有表的結(jié)構(gòu)形式和規(guī)模的靈活性,不必預(yù)先設(shè)定;
(8)具有收集無用單元的功能。
關(guān)于 prolog語言
(1)WHAT型語言;Prolog 由程序設(shè)計(jì)的“How to do the Job”向 “What you want to do”前進(jìn)一步。用戶只要說明已知事實(shí)是什么,定義規(guī)則(說明對象間的關(guān)系),再告訴要解決的問題是什么(詢問)就行了,不必告訴計(jì)算機(jī)如何一步一步做,問題的求解是通過Prolog的內(nèi)部機(jī)制自動(dòng)生成。
(2) 基于一階謂詞邏輯,既有堅(jiān)實(shí)的理論基礎(chǔ),又有較強(qiáng)的表現(xiàn)能力;Prolog的文法簡單,描述能力強(qiáng),更接近于自然語言,程序易寫易讀,程序量小。
(3) Prolog自動(dòng)實(shí)現(xiàn)模式匹配(合一功能),自動(dòng)回溯,這兩種是人工智能系統(tǒng)中常用的基本操作;
(4)內(nèi)部的回溯能力及不確定性使Prolog對同一個(gè)問題可給出多個(gè)解;Prolog具有不確定的原因有二個(gè):①過程性的不確定性:Prolog謂詞調(diào)用是用模式匹式、自頂向下的深度優(yōu)先搜索自動(dòng)回溯策略,當(dāng)變元值不滿足謂詞時(shí)產(chǎn)生回溯,求得變元之另一值,如此下去直到謂詞為真;②變元特性的不確定性:系指謂詞中變元既可用來作輸入變元又可作輸出變元的這種性質(zhì)。變元特性的非確定性引起提問方式的多樣性,增強(qiáng)了交互能力(會(huì)話能力)。過程的不確定性和變元特性的不確定性,這是傳統(tǒng)程序設(shè)計(jì)語言以及另一種AI語言LISP所不具備的智能特性。
(5)Prolog的數(shù)據(jù)和程序的統(tǒng)一,Prolog提供了一種統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)--項(xiàng)(term),用來構(gòu)造數(shù)據(jù)和程序。數(shù)據(jù)和程序并沒有明顯區(qū)別,同樣存在數(shù)據(jù)庫中。并且提供了修改數(shù)據(jù)庫的指令ADDCL和DELCL,在程序執(zhí)行中,可以自行修改數(shù)據(jù)、改變控制,因而可以編制能自行修改程序和數(shù)據(jù)的程序,為實(shí)現(xiàn)某些智能提供了方便;
(6)遞歸是Prolog語言的重要特點(diǎn)之一。
缺點(diǎn):(1)在編譯系統(tǒng)實(shí)現(xiàn)問題上,在執(zhí)行效率低問題上,在系統(tǒng)開銷大的問題上,Prolog遇到了比LISP更大的困難;由于深度優(yōu)先算法,由于控制機(jī)制具有普遍性,由于遞歸和自動(dòng)回溯,Prolog程序中間變量過多嚴(yán)重浪費(fèi)內(nèi)存,對具體的問題不免有多余的回溯,因而浪費(fèi)了較多的機(jī)器時(shí)間和空間,降低了效率。
(2) 大型的Prolog程序調(diào)試不容易;Prolog算法都是深度優(yōu)先搜索和自動(dòng)回溯,在程序執(zhí)行過程中細(xì)節(jié)由系統(tǒng)內(nèi)部掌握,減少了人設(shè)計(jì)控制的工作。但反過來,用戶很難或根本無法控制算法的細(xì)節(jié),對程序控制的唯一途徑是通過“cut”操作(但cut影響了prolog的完備性)。因此大型prolog程序比LISP程序調(diào)試?yán)щy得多。
(3) Prolog的“not”是“失敗的not”,不是邏輯否定,只有在封閉世界假設(shè)基礎(chǔ)上才能認(rèn)為是邏輯否定。Prolog對量詞的處理也不夠。它視所有規(guī)則前面有對規(guī)則中所有變元的全稱量詞,而視詢問公式前有對詢問中變元的存在量詞。但實(shí)際應(yīng)用中封閉世界假設(shè)不一定合適。
(4) Prolog是描述笥語言,處理的是關(guān)系,因而在過程性控制方面局限性較大。但目前不少國家已經(jīng)實(shí)現(xiàn)了Prolog和LISP語言之間或它們與傳統(tǒng)語言之間的轉(zhuǎn)換接口。所以在過程控制方面也有推廣使用Prolog的,例如PC-Prolog。又如,POPLOG是LISP、PROLOG和POP-11的混合物,其中允許這三種語言寫的程序互相調(diào)用。也有以一種程序設(shè)計(jì)風(fēng)范為主、引進(jìn)并兼顧另一種風(fēng)范的,例如LOGLISP(以LISP結(jié)構(gòu)為基礎(chǔ),加進(jìn)邏輯程序成分的)。
Prolog詳細(xì)介紹
Prolog(Programming in Logic的縮寫)是一種邏輯編程語言。它建立在邏輯學(xué)的理論基礎(chǔ)之上, 最初被運(yùn)用于自然語言等研究領(lǐng)域?,F(xiàn)已廣泛的應(yīng)用在人工智能的研究中,可以用來建造專家系統(tǒng)、自然語言理解、智能知識(shí)庫等。同時(shí)對一些通常的應(yīng)用程序的編寫也很有幫助,能夠比其他的語言更快速地開發(fā)程序,因?yàn)樗木幊谭椒ǜ笫鞘褂眠壿嫷恼Z言來描述程序。
評論
查看更多