lisp scheme 果壳_走出Lisp(Scheme)困境
從去年開始入坑Lisp,周周轉轉也算是基本入門了這一傳說中的語言。
Lisp確實是一門很開明的語法規范。lambda是基本定義形式,遞歸在其骨子深處,試圖通過函數表達世界,的確這個世界是周而復始的,有些人愿意稱為循環,一個固定的迭代算法加上算法演算后不斷更新的執行環境。
確實Lisp 的入門會讓你感受到遞歸的眩暈和神秘,這很迷人,但總想著遞歸搞定問題,未免有些誤入歧途,Lisp的后續版本其實對循環是支持的。遞歸可以實現循環,只需要小小的包裝。
面向對象概念據說是Lisp最先提出的,但使用上一開始確實看著有些別扭。這個是可以直接使用的,然而Java等后續在面向對象上確實是更進一步的。我更喜歡用閉包去做一些簡單的包裝,實現簡單的面向對象,這一點在不少后續的腳本語言都有借鑒。
一直是鼓吹中的宏,幾乎給與了高級語言使用者一個編譯器的表達。看到網上很多人不明白,甚至覺得不必要,在這一點上,我想說,不明白的那些多數是做商業軟件開發的,更專業化的學術研究或者非常規的IT應用。
Lisp通過宏給與了開發者上帝般的待遇,通常更大的權限對應的是更多的風險,企業選用該編程語言也就意味著需要招聘能夠駕馭該風險的人,成本相比Java等保守的語言就會高出很多,而且業務拓展也會在人才數量上受到限制。
但我很喜歡宏這個東西,因為它給了我定義自己風格或熟悉語法的機會。曾經被一個985院校畢業的同事告知不要使用那些有風險的表達,確實避開風險就會基本沒有問題。宏的使用在官方也確實被告知不要輕易使用,除非現有的規則使你不爽。我更多的喜歡發現所謂風險背后的使用價值,就好像玩耍雙截棍,最開始不小心就會被自己抽一下,當熟悉后,一切就會不同了,棍子在身邊翻滾,還很花哨,實際的擊打效果也是值得一提的。從開始搗鼓宏開始,我的開發環境已經崩盤好多次了,宏的道必須走下去。
學習中被Lisp的continuation卡住,翻看了很多文檔,它與lambda表達式不同,lambda是順序執行的,而continuation提供了中斷掛起在內存,并持有該代碼塊,這為跳出代碼塊和跳出后在特定時間回到相應位置提供了可能。這個比Java 的continues在邏輯上更為底層,Java的continues只是繼續下一次循環,而繼續下一次循環只是這一演算的一小部分。
Lisp的學習歷程對商用開發者是不友好的,因為它總喜歡從很專業的數學和編程語言原理開始,在商業的角度并不需要太多人關心這個。
在經歷了上述折騰后,使用asdf,引入現有類庫,從相對友好的編程模式開始Lisp之旅,然后和學習其他語言一樣慢慢的向下學習該語言的細節和原理,最后在此基礎上如何做出拓展。
交流的語言源于溝通的需要,然而語言遠在交流之前就已存在,語言是人對事物標記和回溯的工具,為了交換認識,才衍生出通用的事物標記——各種(地區)方言。與其說我們在使用編程語言,還不如說我們在表達我們對世界的看法。
Lisp的使用是數學的思考,是生活的縮影,更值得贊許的是它在引導開發者認識問題的本質并為獨特的表達提供可能,所以需要一個平常心,好奇心,在日常中慢慢品悟。
總結
以上是生活随笔為你收集整理的lisp scheme 果壳_走出Lisp(Scheme)困境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shapefile导入oracle,sh
- 下一篇: html读取servlet,简单html