前言
有些程式設計的教材,帶有顯著的實用性。像是學習 PHP、JavaScript 及 MySQL,就是準備要寫動態網站 (dynamic website)。
本系列文章的目的則是理解程式設計 (programming) 的基本概念 (concept)。也就是說,這系列文章的實用性沒那麼明確,是以理解觀念為主。
電腦程式 (Computer Program) 的根源
不論使用什麼程式語言 (programming language) 實作電腦程式,這些程式終究是由 CPU、GPU 等晶片 (chip) 進行運算。選擇和使用程式語言的重點應該是符合需求且易於使用,而不是執著於特定程式語言。
實際上,程式語言就像汽車一樣。同樣是從甲地到乙地,有些車可以載很多貨,有些車可以載很多人,有些車跑很快,有些車很省油。但汔車的駕駛方式都大同小異。在這趟程式設計的旅程,我們會坐上 Common Lisp 這款有點歷史的車。
為什麼使用 Common Lisp
筆者本來想要用 Python、Ruby 等實用性較強的語言。但對進階的語法特性,像是元程式 (metaprogramming)、巨集 (macro),使用 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。使用其他系統的讀者,請自行參考系統手冊來安裝所需的開發工具。