Clojure 程式是由許多運算式 (Expression) 組合而成。在 Clojure 中,Expression (運算式) 也被稱爲 Form (形式)。一個運算式執行之後 (或叫做 Evaluate 求值),得到執行後的結果。
以 Hello World 範例程式爲例,以下是 Clojure 版本:
(str "Hello " "World")
;; => "Hello World"
以上的運算式使用列表 (List) 來表示函式呼叫,列表使用左右兩個小括號來表示。括號中分別有三個元素:符號 (Symbol) str
,以及兩個字串:Hello
與 World
。
符號 (Symbol) str
,對應到 Clojure 內建的函式。Clojure 會找到這個符號對應的函式並呼叫它,執行的結果是將帶入的字串串接起來。
Clojure 與 LISP 家族跟其他語言不同的是,語法採用前置表示法 (或稱做波蘭表示法),將函式或運算元擺放在括號內的第一個位置,之後的位置則擺放各個參數。有些情況下第一個位置擺放的並非函式或運算元,這種特殊的運算式被稱爲 Special forms。
在其他非使用前置表達式的語法中,要將一連串數字相加起來會寫成:
1 + 2 + 3 + 4 + 5
而使用前置表達式的 Clojure 只要寫成:
(+ 1 2 3 4 5)
或是在其他語言中的 +
與 *
的執行優先順序需要注意,一搞錯結果就會不一樣:
1 + 2 * 3
使用前置表達式就非常清楚,誰先處理後處理則一目瞭然:
(+ 1 (* 2 3))
Clojure 提供跟其他主流語言類似的資料型態與資料結構,而有些則與主流程式語言不盡相同,這裡先提供大致的導覽,之後文章將會詳細介紹。
Clojure 提供了跟主流語言類似的數字表示法,常用的有整數、浮點數和有理數。
整數:
42
;; => 42
浮點數:
3.14
;; => 3.14
有理數:
(/ 1 3)
;; => 1/3
Clojure 的字串使用雙引號方式來表示,引號內擺放需要的文字。型態是 Java 中的字串類型 java.lang.String:
"Issac Asimov"
;; => "Issac Asimov"
Clojure 表現字符 (Character) 的方式與主流程式語言稍有不同,它在欲使用的字符之前加上反斜線 (\):
\A
;; => \A
\B
;; => \B
\b
;; => \b
\a
;; => \a
除了可視字符之外,以下是其它特殊字符的使用方式:
\space
;; => \space
\newline
;; => \newline
\formfeed
;; => \formfeed
\return
;; => \return
\backspace
;; => \backspace
\tab
;; => \tab
(未完待續)