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