AI學(xué)說話:新語言LISP的誕生 麥卡錫考慮過和IBM合作升級現(xiàn)有的FORTRAN,但是IBM卻在這個時候退縮了。20世紀(jì)60年代初期,在維納黨不斷的蠱惑下,很多人都認(rèn)為計算機可能會威脅到他們的工作崗位,IBM可不希望自己好不容易造出來的又大又笨重的計算機滯銷。因此,為了打消客戶的疑慮,IBM停止了所有關(guān)于人工智能的研究,把計算機說成是非智能的快速運算設(shè)備,它們百依百順、只會按要求行事。 程序員把問題分解成更加容易管理的部分(結(jié)構(gòu)化編程),因此大部分程序只需要服從“做這個,然后做那個”指令的順序事件就行了。反反復(fù)復(fù)。 面對越變越復(fù)雜的FORTRAN,麥卡錫不再糾纏于去升級它,決定開發(fā)一個的新語言,他要設(shè)計出一種越變越簡單的語言??墒荌BM不可能再為他買單,該找誰要這筆研究經(jīng)費呢? 蘇聯(lián)幫了他一臂之力。1958年,蘇聯(lián)發(fā)射的人造衛(wèi)星剛剛進入太空,艾森豪威爾總統(tǒng)害怕在科技上落后蘇聯(lián),迅速成立了ARPA(先進研究計劃署,因特網(wǎng)就是在這個組織中誕生的)。ARPA就相當(dāng)于一個大的政府引導(dǎo)基金,促進各個高校進行科技成果轉(zhuǎn)移轉(zhuǎn)化。政府希望這幫科學(xué)家能“出色”做點成績出來,但其實政府自己也不知道什么才叫“出色”。連書面提案都沒準(zhǔn)備,麥卡錫和明斯基很順利地就得到了一筆經(jīng)費,并用這筆錢成立了MIT人工智能研究室。他們兩個有了一個大工作室、一臺鍵控打孔機,此外還配備了一名秘書、兩個程序員和六個數(shù)學(xué)專業(yè)的研究生。 有天才的科學(xué)家,有不差錢的實驗室,還有最先進的設(shè)備,打敗FORTRAN的新語言很快就誕生了。 前面說了,F(xiàn)ORTRAN語言相當(dāng)于把你用紙筆計算的過程通過計算機實現(xiàn),它是用一種按部就班的方式解決問題。如果真實世界要復(fù)雜的多,計算機總會遇到筋疲力盡的情況,更何況大部分事情也不是用幾個簡單的公式就能算出來的。比如,在客觀世界里,我們能找到一個嚴(yán)格的圓形或者三角形嗎?找不到。自然界里一個嚴(yán)格意義上的幾何圖形都沒有,存在的只是幾何規(guī)律。所以需要我們輸入的數(shù)據(jù)非常多樣化,而且通常也不會有什么固定的格式。 以下棋為例,車馬炮都有各自的走法各自的規(guī)則,儲存這些規(guī)則需要的結(jié)構(gòu)和數(shù)據(jù)自然都不一樣;再加上這些規(guī)則還是不斷變化的,比如卒在沒過河之前只能一步一步往前挪,過了河之后橫著走豎著走都可以,這就需要卒的規(guī)則能夠隨時修改、增加、刪除和改變。 所有的這些,都需要放開對數(shù)組空間大小的約束,允許實時動態(tài)地增加和減少數(shù)據(jù)。麥卡錫給出的解決方法是:加兩個括號。 對,沒錯,就是括號 比如你想做計算題嗎?你可以用(time 3 (plus 1+2))表示3*(1+2);再比如,你想去購物嗎?你可以用(milk egg apple)表示你的購物清單。加上了括號之后,數(shù)組就變成了鏈表,原來只能按照規(guī)定好的順序和步驟一步一步往下走的程序,現(xiàn)在可以通過指針和遞歸函數(shù)在鏈表之間自由地活動。如果需要修改的話,就分配出新的內(nèi)存空間,不需要用時就把已分配的空間刪掉,不會造成內(nèi)存空間的浪費。 如果把程序比作貨物的話,用FORTRAN編程就像是讓碼頭工人背著沉重的貨物爬上踏板,鉆進貨艙,按照順序整整齊齊地碼在卡車?yán)铩H绻幸粋€貨物放錯地方了,或者需要調(diào)整一下堆放的位置,就必須先把其他貨物都卸下來,再進行重新調(diào)整。 而麥卡錫發(fā)明的新語言就像是搬運界的集裝箱,先把貨物分好類,裝進集裝箱里,直接運輸集裝箱就可以了。如果需要增減貨物,找到相應(yīng)集裝箱的序號就行。 這個新語言就叫LISP(List Processing language),也可以把它叫作“表處理語言”。 當(dāng)當(dāng)當(dāng)~當(dāng) 簡單來說,相比FORTRAN,LISP有以下3個主要特點: LISP特點 1. 計算用的是符號表達式而不是數(shù); 2. 控制結(jié)構(gòu)基于函數(shù)的復(fù)合; 3. 用遞歸作為描述問題和過程的方法。 獨一無二的宏 隨著工作的深入,麥卡錫希望進一步加強LISP的表達能力。為了能讓LISP可以明確地表達任何可計算函數(shù),他加入了一個叫做“求值”(eval)的功能?!扒笾怠痹试S程序定義新的函數(shù),然后在不需要暫停程序運行的情況下,將這個新定義的函數(shù)作為程序的一部分執(zhí)行。 這就很厲害了。比如說,由于金融市場時刻都在變化,所以股票交易所必須每周7天、每天24小時不停地提供計算服務(wù)。如果有個分析師寫了一個程序,發(fā)現(xiàn)可以用新的方法分析納斯達克的股票數(shù)據(jù),那他馬上就能在不中斷機器的情況下用這個新的模型。 也就是說,無論在什么時候,整個程序都是可用的。LISP并不真正區(qū)分讀取期、編譯期和運行期。你可以在讀取期編譯或運行代碼;也可以在編譯期讀取或運行代碼;還可以在運行期讀取或者編譯代碼。 聽起來很熟悉,這不就是通用圖靈機嗎?由于求值函數(shù)可以帶動并執(zhí)行任何函數(shù),所以它扮演的是'通用圖靈機' 的角色,是其他計算機的集大成者。(可戳回顧圖靈之死:他拯救了世人,卻被世人遺棄) 圖靈機:我又來啦! 再往深處想,這是不是意味著我們可以寫出一種能夠自己編程的程序?這可能聽起來很怪異,但是對于LISP語言卻是可以實現(xiàn)的。最常用的做法就是使用宏。 LISP的宏是獨一無二的,連現(xiàn)在的很多高級語言里都沒有宏。一般的源代碼程序經(jīng)過編譯器解析就會生成解析樹,宏的特別之處在于,你可以通過它控制解析樹,進行任意的存取操作,還可以生成其他程序。 什么是宏?就是把一些命令組織在一起,作為一個單獨命令完成一個特定任務(wù)。玩過《魔獸世界》的人可能會發(fā)現(xiàn),游戲里面有多達13個種族和11大職業(yè),每個角色的表情動作都十分繁雜。這個時候該怎么同時激活2種以上的法術(shù),或者施法的同時用游戲中的聊天系統(tǒng)發(fā)送信息呢?解決方式是“宏命令”。通過建立宏命令,你就能讓暗夜精靈在喝水的同時施放影遁,也能讓獵人在標(biāo)記敵對目標(biāo)的同時喊話提醒隊友。 所以通過宏,我們既可以改進某個程序讓它變得更短,也可以加入一種新語言進來,讓它成為LISP的一部分。LISP就像是修煉了吸星大法的任我行,通過吸收別人的內(nèi)功讓自己變得越來越強大。宏讓LISP擁有了一種很奇特的語法,或者說它根本就沒有語法。 其實說到底,不管是機器語言還是匯編語言,他們共同的問題都在于一寫就容易寫很長,寫長了就容易出現(xiàn)BUG,但是用高級語言就可以寫的很短,可讀性也很強。而且不同型號計算機的機器語言是不完全相同的,如果用高級語言就不用針對每種機型寫代碼,重新寫編譯器就行。 編譯器處理的高級語言代碼叫做源碼,處理之后的機器碼叫做目標(biāo)碼。后來又出現(xiàn)了開放源代碼的潮流:公開源碼并且可以隨意修改。開源讓我們可以修改軟件,同時也能自己動手修正BUG。 電影《源代碼》海報,這是一部2011年的美國科幻驚悚片 到今天,高級語言大概有幾百種,但是最高級的主流語言,也只是剛剛接近LISP的水平,而且根本做不到像LISP那樣強大。Java、Perl、Python、Ruby……你會發(fā)現(xiàn),排在越后面的語言,越像LISP。Python模仿LISP,甚至把很多設(shè)計錯誤的功能都一起模仿了。至于Ruby,如果回到1975年,你聲稱它是一種LISP方言,沒有人會反對。編程語言現(xiàn)在的發(fā)展,不過剛剛趕上1958年LISP語言的水平。 埃里克·雷蒙德在《如何成為一名黑客》這本書里說,如果你想當(dāng)個黑客,可以從Python和Java開始入手,因為比較容易掌握。然后開始學(xué)C和Perl,前者用來對付Unix系統(tǒng),后者可以用來管理系統(tǒng)和開發(fā)CGI腳本。最后,他建議,如果你把黑客當(dāng)做自己的人生目標(biāo),就必須要學(xué)LISP。即使實際工作中很少會用到LISP,但只要一旦掌握了LISP,就會感覺到它帶給你的極大啟發(fā)。 如果你是投資人,想要評估一家技術(shù)公司的水平怎么樣,偷偷教你一個訣竅:看他們的程序員招聘啟事。如果要求應(yīng)聘者有Oracle數(shù)據(jù)庫經(jīng)驗的公司,你可以直接放棄了;如果招聘C++或者Java,說明水平一般;如果招聘Perl或者Python,說明技術(shù)還有點門檻;如果你遇到一家技術(shù)公司里面的程序員都會寫LISP,相信我,不管這家公司是做什么的,都千萬千萬不要錯過它! 一句話,LISP是目前最強大的編程語言。為什么LISP會如此強大?因為這種語言本質(zhì)上不是一種技術(shù),而是數(shù)學(xué)。數(shù)學(xué),永遠(yuǎn)是時代的弄潮兒。 麥卡錫其(奇)人 繼續(xù)說麥卡錫。 LISP編程語言的創(chuàng)造者,人工智能領(lǐng)域的泰斗——麥卡錫 1927年9月4日,麥卡錫生于波士頓。他的父親是一個愛爾蘭移民,做過木匠和漁夫,但同時也是一個發(fā)明家和工會積極分子,擁有兩項很冷門的專利,一個是捻船縫機技術(shù),還有一個是桔汁冷凍機。麥卡錫的母親是來自立陶宛的猶太人,熱心于女權(quán)運動,還當(dāng)過記者。 麥卡錫的父母在20世紀(jì)30年代都曾參加美國共產(chǎn)黨。受到父母的影響,麥卡錫對社會問題也比較關(guān)注,還倡儀過修改“人權(quán)法案” 。 麥卡錫還是個特別喜歡刺激的人,他對攀巖、跳傘、駕駛滑翔機這些運動情有獨鐘,曾和他的第二任妻子維拉·沃特森一起攀登過世界上不少大山高峰。這個沃特森也是一位程序員,但她更知名的身份卻是登山運動員。她是第一位獨自攀上西半球第一高峰阿空加瓜山(海拔6960米)的女性,但不幸的是,她隨后在一次攀登位于尼泊爾中部的阿那波爾那峰(海拔8075米)的探險活動中不幸遇難。 麥卡錫的性格決定了他不是個循規(guī)蹈矩的人。因此當(dāng)MIT沒有對LISP語言采取足夠重視時,他決定前往美國西海岸——那里有新興的反主流文化,教授可以扎著長發(fā),穿有破洞的牛仔褲上課。 后來,麥卡錫對MIT的評價是:跟那里的人解釋LISP語言,就像是跟挖溝工人說明蒸汽鏟子有什么價值一樣費勁。 People prefer dealing with machinery to dealing with bureaucracies.– jmc 1986 相比起應(yīng)付官僚制度,人們更愿應(yīng)付機器?!溈ㄥa(1986) 在西海岸,麥卡錫發(fā)現(xiàn)這里不存在官僚保護,如魚得水的他迅速在斯坦福大學(xué)建立起了第二個人工智能實驗室,跟原先MIT的那個分庭抗禮。很快,斯坦福大學(xué)的這個實驗室成為了加州黑客的天堂,并催生了黑客情懷。在之后15年的時間里,一個由硬件和軟件工程師組成的驚人陣容迅速涌入了這個實驗室,蘋果創(chuàng)始人史蒂夫·喬布斯多年以后都還對這個設(shè)立在山上的實驗室念念不忘。這里保留了反主流文化氛圍,透過它,一股對人工智能領(lǐng)域樂觀的情緒蔓延開來,充斥著整個20世紀(jì)60年代。 1971年,麥卡錫獲得圖靈獎,在頒獎典禮致辭中,他宣稱:每個人都需要編程,因為這將是我們與仆人對話的方式。只需要十年的時間,就能打造出“全智能機器”。 ![]() 其實,麥卡錫一直都只是把LISP看做一種手段,目的是達到他的主要目標(biāo):制造一臺像人那樣有智慧的機器。 我們后面可以看到,在人工智能歷史上的第一個十年中,這種樂觀無處不在。 參考文獻: [1]黑客與畫家(Hackers & Painters: Big Ideas from the Computer Age);Paul Graham;譯者:阮一峰;ISBN:9787115249494 [2]Google面試官Gayle McDowell:找一家能讓你開心的公司(圖靈訪談)http://www./article/66910 前文回顧(圖靈系列) 50年代~60年代 |
|