|
作者:i9kcn · 2005-11-23 20:12:59 · 來源:
· 瀏覽量:
10
為蛇足者,終亡其酒——《戰(zhàn)國策》 這個系列終于寫完,很是費了我不少力氣,因為我從小語文就一直不太好,有時很難表達清楚自己的意思。這次算是自己攆著自己這只鴨子上架吧。 Lisp的歷史十分悠久,據(jù)說僅次于Fortran,算得上是第二古老的語言。對于Fortran,語言學(xué)家給予的負(fù)面評價遠比正面評價多,甚至在很多場合被作為程序設(shè)計語言的反面教材;但是Lisp則剛好相反,它一直被人們作為一個優(yōu)秀作品的例子被大加贊揚,這些人中包括著名的計算機科學(xué)家,Smalltalk的發(fā)明人——Alan Kay。 有一個傳言,據(jù)說McCarthy當(dāng)時想把這門語言的語法設(shè)計往后拖一拖,等到他把一些有趣的事做完之后,再回過頭來給這門給予Lambda演算理論的語言加上一些數(shù)學(xué)家們熟悉的語法,可是他的一個學(xué)生發(fā)現(xiàn),在一個還沒有定義正式語法的抽象語法上中寫程序,感覺非常好,于是McCarthy干脆就決定不定義Lisp的語法。直到如今,Lisp的“語法”定義中值得一提的規(guī)則似乎只有一條“括號要配對”,其它的都是“語義”上的規(guī)范。 這樣做當(dāng)然不是沒有代價的,很快Lisp就出現(xiàn)了第一個分支Scheme。這個語言由Guy Steele, Jr.和他的老師Gerald Sussman設(shè)計。這兩位最開始的工作是改進Lisp,他們共同把Lisp由Dynamic scope變成了Lexical scope。今天幾乎大家熟悉的所有語言都是Lexical scope。后來他們共同把Continuation這個概念引入了Lisp,于是一門新語言就這樣誕生。 隨后,Sussman把Lexical scope和Scheme中的一些其它概念都引入了Lisp,并由此確立了Common Lisp的標(biāo)準(zhǔn),Sussman本人也一直是Common Lisp的主力。 作為一門最早出現(xiàn)的FP語言,Lisp當(dāng)然有它的缺點,其中最為人詬病的恐怕就是括號了,所以隨后出現(xiàn)的許多FP語言都試圖使用另外的語法來清晰的描述程序,這其中最著名的當(dāng)屬Haskell(也許還有Caml?),Haskell是一門“純正”的FP語言,在Haskell中,變量不能賦值,沒有循環(huán),甚至沒有程序流程,一切都是函數(shù)。 (注:我個人認(rèn)為,想要領(lǐng)會FP的精髓,用Haskell入門似乎更合適) 近年來,隨著FP的進一步流行,許多命令式語言當(dāng)中也逐步加入了FP的成分,典型如C++中的“functor”,如果你用過STL或者Boost,你會發(fā)現(xiàn)利用functor可以完成很多不可思議的功能。就我個人的經(jīng)驗,functor最密集的應(yīng)用是在Boost.Spirit庫中,它可以讓你用一大堆Parse/Match Functor構(gòu)造一個復(fù)雜的語法分析器。 熟悉一門函數(shù)式語言,用心體會它的妙用。在你轉(zhuǎn)變思維方式后,你會發(fā)現(xiàn)即便是原來你熟悉的命令式語言也能發(fā)揮出更大的威力。 參考文獻:
在線資源:
|
|
|