又名:寫給不懂編程的人算法
一時興起,用了差很少十天的時間,爲「不懂編程」的人寫了一系列的形散神不散的散文。這是我在這一年裏作的我以爲最有意義的一件事,固然在我身邊的人看來,這多是我在這一年裏作的最遊手好閒的事了。編程
「不懂編程」的人是加了引號的。這我的不是會編程的人,也不是不會編程的人,實際上這我的是我。也就是說,這一系列文章,不過是自嗨。拿出來示人,是本身以爲挺不錯的東西,覺得別人也會以爲挺不錯。極可能這種感受是錯誤的。segmentfault
這些文章將 Emacs 做爲一臺可編程的機器,以 Emacs Lisp 做爲編程語言。編程語言
對於 Lisp 語言,在寫這些文章以前我只是略懂。如今我所掌握的 Emacs Lisp 的知識基本上都在在這個系列的文章裏。這些知識基本上是我在寫這些文章的過程當中現學現賣,只不過是以我最喜歡的方式來賣的,其中還夾雜了一點奇怪的東西——我對這個世界的淺見薄識。函數
在這十二篇文章裏,我很不學術也很不嚴肅地介紹了計算機原理、Emacs 的基本用法,以及 Emacs Lisp 的函數、變量、遞歸、Y 組合子、動態域/詞法域、宏等知識,還講述了 Emacs Lisp 版本的快速排序與列表的遞歸遍歷程序的編寫。我將這些知識稱爲程序的基本形狀。翻譯
這些文章的目錄以下:設計
更新說明: code
2017.12.06:利用
let
表達式對第 12 篇的list-map
函數進行了簡化。排序2017.12.07:爲第 6 篇補充了一個例子,它是對第 3 篇定義的
c-malloc
函數所作的改進。遞歸2017.12.07:爲第 10 篇補充了一種守株待兔式的理解遞歸的方法。
2017.12.08:從新梳理了一遍對第 8 篇,克服了一些文字不通順而致使難以理解的問題。
雖然這些文章講的是如何用 Emacs Lisp 語言在 Emacs 環境中編程,可是一個事,你用英語來說,仍是用漢語來說,事沒有變,只是外在的形式變了。所以這些文章裏所說的這些事,可能還都是你們常常碰見的。退一步說,學點 Lisp 也不算壞事。
前面已經說了,這些文章僅僅介紹了程序的基本形狀,就像歐氏幾何學裏的三角形、四邊形之類的東西。要想編寫更復雜並且也更有用的程序,應該去看那些介紹了程序更復雜的形狀的書。
接下來,對於編程的初學者,我建議的是,在參與編程這項工做的過程當中,不妨再啃幾本下面這樣的書:
假若只是對 Emacs 有了興趣,那就去看 Emacs 與 Emacs Lisp 的官方文檔。