我爲何要學 Common Lisp

我喜歡文本處理,之前熱衷於使用數據庫技術。如今用 Vim 和 Perl。 我能夠不假思索的用 Vim 寫 Perl 代碼。像聊天同樣。Perl 語言的全部特性我都熟悉,幾乎不用查詢幫助文檔。 其餘語言中關於文本處理,正則表達式的函數和算法,我都比較感興趣。 擁有不一樣語法的語言,我也當成一種文本。正則表達式

我愈來愈發現,天天處理的大都是語言自己形成的問題。 彼此之間有着語法和文化的鴻溝,互相之間充滿了誤解。算法

我決定寫一個通用的語言解析算法,可讓不一樣的語言能夠相互轉換。數據庫

這是一個巨大的挑戰,但無論多困難,都是值得的。編程

第一階段. 我打算將 BNF 語言描述的語法做爲配置文件進行解析,並生成相應的規則。網絡

很快發現,太多的精力放在解析這門語言上,BNF 語系有太多的不一樣,難道我要用那麼多精力,累死在作 BNF 的語言轉換器的路上嗎?數據結構

由於轉換 BNF 到數據結構,只是時間上的問題,技術不是問題。何須浪費時間在這上面呢?必定有許多人能夠把這個作的很好。函數

既然解析語言是爲了轉換成內部數據結構,我爲何不用表示數據結構的語言來作個人配置文件呢?測試

我決定用數據結構的表示形式來作配置文件。設計

進度加快了,但又遇到了問題,因爲調試的問題,我須要在數據結構中加上暫停和註釋的功能.調試

因爲動態規則的問題,我須要對這個數據結構進行動態生成,而個人數據結構沒有什麼規則可言,不久,關鍵字和操做符也要加到這門語言當中,我忽然意識到,我居然在設計一門語言?

我曾經發過誓,再也不發明什麼新的語言,只是轉換舊的。怎麼違背了當初的誓言呢?

但能解決我問題的語言是什麼呢?我列舉了幾個特性:

  1. 函數是第一類變量,能夠傳遞函數名,動態的調用。
  2. 數據結構是動態生成的,而數據結構自己的字面量表示,就是一門語言。
  3. 配置語言自己就是一門完整的語言。

聽聞 Lisp 就是這樣的語言,但看看 Lisp 艱深的書籍和各類像機器碼同樣的程序,就從內心否認了繼續研究 Lisp 的想法。

社區裏不少人喜歡 Emacs, 時常看他們貼出 Elisp 的代碼。這些表示法和 lisp 語言同樣像一件古董。Lisp 除了能作 Emacs 的配置語言外,還能作什麼呢?

《黑客和畫家》改變了個人想法,原來 Lisp 能夠作網絡商店,並且開發效率那麼高?這門語言真的那麼神奇,難道 Lisp 真的就是我內心想要的那門語言嗎?

經過使用函數和宏不斷提升程序的抽象程度,用更精煉和直白的配置語言完成更高層次的開發需求。無論程序多複雜,只要正確的對函數進行命名,細緻的設計宏,就能讓個人配置文件始終簡單易懂。

堅持使用函數編程範式,儘可能不用有反作用和依賴全局變量的函數,除了迭代器以外。讓系統的每個組件都是單獨可測試的。(迭代器就是作一次列表解析, 絕對沒有反作用,是不可能的。)

通過屢次的研讀 Lisp 的書籍,我如今能夠確認,是的,沒錯。Common Lisp 就是那個能幫助我實現理想的語言。惟有 Common Lisp 能知足個人要求。

相關文章
相關標籤/搜索