前言
有些程式設計的教材,帶有顯著的實用性。像是學習 PHP、JavaScript 及 MySQL,就是準備要寫動態網站 (dynamic website)。
本系列文章的目的則是理解程式設計 (programming) 的基本概念。也就是說,這系列文章的實用性沒那麼明確,是以理解觀念為主。
電腦程式 (Computer Program)
不論使用什麼程式語言 (programming language) 實作電腦程式,這些程式終究是由 CPU、GPU 等晶片 (chip) 進行運算。選擇和使用程式語言的重點應該是符合需求且易於使用,而不是執著於特定程式語言。
實際上,程式語言就像汽車一樣。同樣是從甲地到乙地,有些車可以載很多貨,有些車可以載很多人,有些車跑很快,有些車很省油。但汽車的駕駛方式都大同小異。
在這趟程式設計的旅程,我們會用到不同程式語言。有時候會坐上 Common Lisp 這款有點歷史的車。
為什麼使用 Common Lisp
Common Lisp 使用者不多,但對展示元程式 (metaprogramming) 等進階語法特性,Common Lisp 相當方便。
除此之外,Common Lisp 是多範式的。不會過度強調函數式程式設計 (functional programming),也可以使用常見的指令式程式設計 (imperative programming)。當然,Common Lisp 支援物件導向程式設計 (objective-oriented programming)。
Lisp 不受歡迎的原因在於大量中括號和前序 (prefix notation) 語法。不過,在現代程式設計編輯器 (programming editor) 的輔助下,這些問題都不是真正的問題。只要讀和寫一小段時間,就會適應 Lisp 的程式碼。
本系列文章的方向
本系列文章的重點在於理解程式設計的概念,而非 Common Lisp 教學。我們的範例程式碼不會太 lispy,以簡單明暸為主。此外,我們不考慮 Common Lisp 實作品間的差異。
我們假定讀者使用 Windows 或 macOS。使用其他系統的讀者,請自行參考系統手冊來安裝所需的開發工具。