Clojure 是一門建立在 JVM 上的 Lisp 方言。它將腳本語言的互動便利性,以及用於多執行緒程式設計的穩健基礎結合起來;它是一種編譯語言,卻保留了動態語言的強大。它提供了簡易的方法,可以輕鬆地存取 Java 函式庫。
Clojure 奉行「程式即爲數據」的 Lisp 哲學,並引入了強大的巨集系統;Clojure 亦是函數式程式語言,更爲了現今多核處理器的開發需求,提供了狀態管理的系統,以確保清晰、正確的多執行緒程式設計。
透過這一系列文章,希望帶領讀者體會及了解 Clojure 語言的優雅、強大與實用,進而在實戰環境中使用 Clojure、擁抱 Clojure。
流程控制(一) 流程控制是枝幹、河流與道路,將如同樹葉、土地與城市一樣的函式連結起來,藉由流程控制,程式可以選擇行走的方向,前進後退、左右轉或是不斷反覆。 本篇...
流程控制(二) 迭代 由於 Clojure 中的資料結構都是不可變 (Immutable),所以沒有主流程式語言的 for 迴圈,因爲 for 迴圈需要在每次迭...
流程控制(三) 列表推導 Clojure 中的 for 與一般程式語言的 for 不同,它利用一個群集作爲來源,運用運算式以及條件式產生新的群集,這稱作列表推導...
命名空間與專案(一) 我心裡一直都在暗暗設想,天堂應該是圖書館的模樣。 — 波赫士《關於天賜的詩》 本篇文章將介紹組織程式碼的方法,包括以類似功能或屬性歸類...
命名空間與專案(二) 命名空間 保護資訊 以上的函式都會引用到命名空間中的公開資訊,如果有些資訊想要隱藏不被使用,可以在使用 def 設立 Vars 物件時加上...
命名空間與專案(三) 編輯器 俗話說:工欲善其事,必先利其器。好的編輯器能夠讓你更輕鬆地輸入程式、容易地測試程式,或是提供有用的資訊修正錯誤。以下介紹開發 Cl...
資料型別與協定(一) 計算機科學有兩大難題:快取失效,爲事物命名以及差一錯誤。 — 菲爾•卡爾頓 我們以程式語言中的物件,數值與函式形塑真實世界,雖然 Cl...
資料型別與協定(二) 擴充 雖然可以使用 deftype、defrecord 或 reify 實作介面或協定,但是缺點是必須在定義型別時就確認,Clojure...
與 Java 共舞(一) Clojure 寄生於 Java 之中,汲取它的養分並試圖解放它的繁重。Java 有優秀的即時編譯 (Just-in-time com...
與 Java 共舞(二) 從 Clojure 呼叫 Java 匿名類型 在前一章提到過的 reify 巨集,能夠用來繼承父類別,產生匿名類別: (.listFi...