程式的基本形狀

2021-09-14 04:32:57 字數 2203 閱讀 7999

又名:寫給不懂程式設計的人

一時興起,用了差不多十天的時間,為「不懂程式設計」的人寫了一系列的形散神不散的散文。這是我在這一年裡做的我覺得最有意義的一件事,當然在我身邊的人看來,這可能是我在這一年裡做的最不務正業的事了。

「不懂程式設計」的人是加了引號的。這個人不是會程式設計的人,也不是不會程式設計的人,實際上這個人是我。也就是說,這一系列文章,不過是自嗨。拿出來示人,是自己覺得挺不錯的東西,以為別人也會覺得挺不錯。很可能這種感覺是錯誤的。

這些文章將 emacs 作為一台可程式設計的機器,以 emacs lisp 作為程式語言。

對於 lisp 語言,在寫這些文章之前我只是略懂。現在我所掌握的 emacs lisp 的知識基本上都在在這個系列的文章裡。這些知識基本上是我在寫這些文章的過程中現學現賣,只不過是以我最喜歡的方式來賣的,其中還夾雜了一點奇怪的東西——我對這個世界的淺見薄識。

在這十二篇文章裡,我很不學術也很不嚴肅地介紹了計算機原理、emacs 的基本用法,以及 emacs lisp 的函式、變數、遞迴、y 組合子、動態域/詞法域、巨集等知識,還講述了 emacs lisp 版本的快速排序與列表的遞迴遍歷程式的編寫。我將這些知識稱為程式的基本形狀。

emacs 是一台計算機:論證了 emacs 本質上是乙個可程式設計的機器——圖靈機。

第一聲問候:介紹了如何在 emacs 裡編寫乙個世界上被寫過得最多的程式——hello world。

勤勞,還是懶惰?:神神叨叨的作者現身說法,強調了程式設計的意義——讓我們更省力。

原子與虛空:介紹了構成程式的基本構成以及程式和 cpu 的關係。

周而復始:對於遞迴,我可能和很多人的認識不同,在我眼裡,它是個發動機。程式也不是由表示式或命令構成的東西,而是一部由 cpu 驅動的機器。

紅藥丸,還是藍藥丸:一本正經的對條件表示式進行了一番胡說八道。

周遊抑或毀滅世界:這一篇,算是與 emacs 最親密的一篇。其實,我原本想用很多篇幅介紹可以擴充套件 emacs 功能的 emacs lisp 程式設計方面的知識,只不過寫著寫著就下了道。

無名:y 組合子的推演。

長長的望遠鏡:介紹了 emacs lisp 的動態域/詞法域,是對第 8 篇的補充。

從混亂到有序:煞有介事的介紹了如何用 emacs lisp 實現乙個快速排序程式,穿插著介紹了向量與列表相關的一些功能。

咒語:介紹了 emacs lisp 的強大的巨集的用法。lisp 的巨集一直都很強大,像失傳很久而被現代人認為失靈的咒語。

無所遁形:介紹了如何讓程式深入探索重重疊疊的列表的任何乙個角落,算是對遞迴函式的認知再作一次強化。

更新說明:

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 也不算壞事。

前面已經說了,這些文章僅僅介紹了程式的基本形狀,就像歐氏幾何學裡的三角形、四邊形之類的東西。要想編寫更複雜而且也更有用的程式,應該去看那些介紹了程式更複雜的形狀的書。

接下來,對於程式設計的初學者,我建議的是,在參與程式設計這項工作的過程中,不妨再啃幾本下面這樣的書:

倘若對 lisp 發生了興趣,就去看《電腦程式的構造與解釋》,最好中文譯本與英文原版都找到,對照著看。

hello world 程式的始作俑者,brain kernighan 寫的《c 程式語言》,最好中文譯本與英文原版都找到,對照著看。之所以要看看 c 語言,是因為它面對的機器要比 emacs 硬,啃起來,不小心就崩了牙。

《如何求解問題:現代啟發式方法》,這本書會介紹一些有用的演算法,在解決實際問題中有用,而不是在考試或比賽中有用。不過,這本書是差不多是被翻譯毀掉了的書,最好找到英文原本來看,而將中文譯本當作谷歌翻譯結果來看。

倘若只是對 emacs 有了興趣,那就去看 emacs 與 emacs lisp 的官方文件。

基本形狀開發 2

2000年12月23日 09 08 00 垂直對齊文字 水平對齊文字 shapesheet 每個形狀都將其屬性儲存在乙個 shapesheet 中。形狀與其 shapesheet 是相同資訊的不同檢視。您對繪圖頁上形狀的每一處更改都會反映在 shapesheet 的 屬性 單元格中。同樣,在 sha...

基本形狀 基本 SVG 文件 2

定義和組 如前一頁中定義的多邊形和漸變,預定義項的實際用法通常有兩種形式。在這兩種形式下,定義的項都通過其本地 url 或 uri 引用。象 html 頁面一樣,id 屬性建立了文件中的乙個引用點。舉例說來,這意味著 uri irisgradient 引用標識為 irisgradient 的文件部分...

Canves基本操作(基本型形狀繪製)

public void drawpoint float x,float y,paint paint public void drawpoints float pts,int offset,int count,paint paint public void drawpoints float pts,p...