沒學過編程的人直接學 Lisp 語言行嗎?
只學 Lisp 能成高手嗎?
How to Design Programs:
http://www.htdp.org/中文版程序設計方法:http://book.douban.com/subject/1140942/
這本書是零基礎入門的:本書以Scheme語言為基礎介紹計算和程序設計的一般理論和實踐。
本書由8個部分和7個獨立的章節(第8、13、18、24、29、33、38章)組成。8個部分主要討論程序設計,獨立章節則介紹一些與程序設計和計算相關的話題。本書第1至第3部分介紹了基於數據驅動的程序設計基礎。第4部分介紹了程序設計中的抽象問題。第5部分和第6部分是與遞歸及累積相關的內容。本書的最後兩部分說明了設計程序的意義,闡述了如何應用前6個部分所描述的程序設計訣竅,以及使用賦值語句必須特別小心的一些問題。
本書可作為高等院校計算機科學與技術專業「程序設計導論」和「計算導論」的教材和教學參考書,也可作為函數式語言和Scheme語言的入門教材。
Lisp並不是函數式編程語言,而是多范型編程語言。使用它可以進行函數式編程,也可以進行過程式編程、面向對象編程,所以其實非常適合入門。
SICP就是很好的例子。這個課程的目的是要向初學者介紹包括函數式編程在內的多種編程范型。選用Scheme(一種Lisp的方言)有這樣幾個原因:- Scheme作為多范型編程語言,適合表達多種編程范型;
- Scheme的語法與其抽象語法是一致的,所以在實現用Scheme寫Scheme解釋器/編譯器這樣的任務時可以避免其它編程語言無法避免的解析語法的複雜度,有利於突出課程重點;
- 另外,選擇Scheme而非Common Lisp,恐怕是因為Scheme在語言上比CL更簡潔(例如:Scheme是Lisp-1),對於小規模開發更簡單。
其實我覺得你已經贏在了起跑線上了……,沒有其它語言的干擾去學習一門FP,是件幸福的事情……
SICP寫的這麼好的書不讀一遍程序員的一輩子都是不完整的。
可以,但是意義不大
Lisp說穿了就是一個以s-expression為輸入的eval()函數而已。真正發揮它的威力是靠你自己在eval()之上構建最適合自己的「編程世界」,然後用這個「編程世界」的元素去給目標域編程。對於沒學過其他編程語言的人來說,見識過的編程概念太少,所以無法形成自己的編程世界觀,更不要說「最適合」了我對lisp感興趣的時候就是從scheme這個分支入手的.對於有一些編程經驗的人來說,這絕對是一次難忘的體驗.在c中享受高效率的宏定義,那麼在lisp中,每句你都可以享受這種快感.
lisp最早應用在人工智慧研究領域,也稱圖靈機語言. 後面由於學習資料的匱乏,又繼續學習lisp,大名鼎鼎的on lisp就是之一.lisp的幾乎所有函數都可以用遞歸輕鬆實現,如果你是個遞歸控,那麼lisp很適合你鍛煉思維.正是lisp的這些語言特性,用它來描述演算法很比其它語言節省大半代碼,有興趣的話,100多行寫上一個c語言解析器也未嘗不可.
現在給予lisp的項目也非常多,著名的編輯器emacs用的是elisp,繪圖軟體autocad用的是virtual lisp做拓展,窗口管理器sawfish也是基於lisp開發的. 編程本身就是現實到抽象的映射,高級語言提供過多模型來簡化這個過程,但對於一個編程人員來說,這些都是必需的鍛煉。Lisp 是所有 functional 語言的始祖。 學 Lisp 的好處是,有很多書介紹最基本的概念,使你可以接近程式語言的發展史來學習。 就像人們從 C 開始,到 C++ 或 C# 什麽的。 如你一開始用較新的語言例如 Clojure, Scala, Haskell 等,可能會被新的高級 features 搞到不明白。
Lisp 後來進化成 Scheme,Clojure 等。 另一有趣而重要的分支是 ML,CAML,OCaml,Haskell 等,其特點是自 ML 時加入的 type system,這個類型系統是這個分支的「靈魂」。 人們常說,在 Haskell 中只要寫對類型,多數便可肯定程式寫得正確。
SICP 是比較高深的技巧和理論,不是真的「入門」書。
PAIP (Paradigms of artificial intelligence programming) 較易,但書很厚。
我建議看一些人工智慧的教科書的 Lisp 「簡介」章節,不需幾天便可以開始試玩了,那最快捷,也符合現時 "agile" 的潮流
PS: 如你真的沒有寫程式經驗,可以上網找個淺易的 tutorial (指導) 網頁。 遇到困難時可以在 IRC 的聊天室中 (例如 freenode 網路的 #Lisp 室) 問人,他們很樂意幫助的 (但須英語)
PS: 您的第零步應該是: 裝個流行的 Lisp 翻譯器,譬如 Windows 的 CLISP,或 ABCL,CMUCL 等,然後打開來,打入 (+ 1 2) 那樣,如見到輸出 "3", 那便算任務完成了建議選newLISP這個比現在的語言簡單很多. 比現代化的CL也簡單很多. 更接近原始時代的LISP(1.5)說LISP不適合新人的和說ASM不適合新人的都是在害人國外的教育和我們剛好是相反的. 很多用LISP和ASM C做開始教學的. 這些東西本身都很簡單, 可以讓你有更多的時間關註解決問題的方法, 而不是糾纏在自我滿足的奇淫技巧中.
沒問題,好好啃 SICP,習題認真做下來就行了
個人覺得SICP還是比較難的。為啥要學LISP?如果的確是以編程為職業的話,可以學學SICP,否則的確比較耗時。這本書不是那麼好懂
我用自己做個栗子。行!因為我是建築師,雖學過編程,但也用lisp編過很多小程序。
當年CAD剛興起,建築設計處於剛甩掉圖板用電腦繪圖的階段。也很少二次開發的商業建築製圖程序。為了利用計算機的自動化特性,本人就找資料兼分析別人的范常式序,寫了很多輔助繪圖的Autolisp程序。在沒有互聯網的時代,這些程序還被單位上的同事用磁碟傳來傳去。後來不需要親自畫圖,這事才停止。
最後,成不成為專業高手是和你的專業能力和努力程度有關吧,與Lisp沒什麼直接關聯。我還有一個同事,做預算工作的資深人士,自己用宏給Excel添加了很多專業功能,作用不亞於商業軟體。lisp就是給沒有編程基礎的人入門的。
學習lisp的好處就是不需要了解硬體,也不需要其他前置知識。
比如學習C要了解整數大小是有限制的。了解浮點數會有舍入問題,了解字元串相加需要移動內存。。。。。
這些葛藤全都不需要。。。。。
非常適合入門
上來直接學Lisp太有必要了, 只有隻你要了解機器如何運作時才是時候學c和asm.
重要的是思想,這個還是要自己慢慢體會。如果學了C再學Lisp,還會有點干擾。我正學習中,暫時把它當作json看……
【補充】SICP指的是《Structure and Interpretation of Computer Programs》即《計算機程序的構造和解釋》
可以!
我是學純 FP 入門的,沒感到什麼認知困難,覺得剛入門時遞歸 list 處理是最難以理解的點吧,如果你有個好的導師,就是那種,入門不是什麼莫名其妙的 Hello World,而是讓你整個造出來函數的教師,就能覺得這些都什麼都不是了。
但是你要做好心理準備,學完 Lisp 後學 C 後會很快忘掉自己當初造遞歸、棧的時候學的東西,C 是罪人啊。
聰明的人+合適的方法+循循善誘的老師,跟你選擇什麼語言開始其實真沒太多關係。
數學好的話 直接啃SICP 啃完後 還有一本大作 忘記啥名字了 數學不行建議學數學 SICP 我就看了頭一章 。。。中文版第二章開始 翻譯質量 很差!!!
自負地說一句,能!因為很多語言有的特性,Lisp都有,如果學其它語言能成為高手,那麼學Lisp肯定也可以
推薦閱讀:
※Lisp可以完成哪些其它語言難以實現的功能?最好能夠舉一些例子
※SICP第二章里的「圖形語言」在DrRacket 或者MIT Scheme上有沒有辦法實現啊?
※Stephen Wolfram對於Lisp的評論
※在lambda表達式中如何使用遞歸?
※給Lice寫了倆工具
TAG:Lisp |