小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Lisp入門(后記)

 老莊走狗 2005-12-11
作者: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ā)揮出更大的威力。


參考文獻:

  1. “Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part1.” Communication of the ACM 3:4, April 1960.
  2. “The Art of the Interpreter, or the Modularity Complex (Parts Zero, One, and Two)”, Guy Lewis Steele, Jr. and Gerald Jay Sussman, MIT AL Lab Memo 453, May 1978.
  3. Lisp 1.5 Programmer‘s Manual, John McCarthy, Paul W. Abrahams, Daniel J. Edwards, Timothy P. Hart, Michael I. Levin.

在線資源:

  1. 可免費獲取的Windows版的Common Lisp版本似乎不多,能想到的只有一個CLISP,網(wǎng)址在:http://clisp.
  2. 可用于Linux的Common Lisp我知道的有CMUCL和SBCL,網(wǎng)址分別是:CMUCL: http://www./cmucl/SBCL: http://sbcl.另外,一個被廣泛應(yīng)用于Gnome中的Scheme實現(xiàn)——guile也包含在絕大多數(shù)Linux發(fā)行版里。
  3. Haskell有興趣的朋友可以去http://www. 找到很多關(guān)于Haskell的信息,同時,在http://www./hugs/ 你可以?/span>

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多