標籤:
相比我們傳統的 c ,java ,python ,javascript等,Clojure的文法比較特別,初一看,還可能會有些不適應。
本文來介紹下Clojure的文法特點。
一、運算式
所有的Clojure代碼都是由運算式組成的,每個運算式都會產生一個值。
常見的運算式如:
60
[2 4 6]
(+ 1 2)
(average [2 3 4])
1)上面的第一個運算式就是一個字面常量,這裡是一個整數。
2)第二個是個整數序列。
3)第3和4 都是函數調用,Clojure中,小括弧 () 表示函數調用,括弧中的第一個值是函數名,剩下的值是參數,整個調用運算式被求值的結果作為調用的傳回值。
在Clojure中,類似其它語言的運算子,都可以看做是函數,這也為何上面例子中的 (+ 1 2) 這個運算式中 + 號放在前面的原因。
二、常量
1、布爾: true false 注意是區分大小寫
2、字串:同java一樣,雙引號擴起,就是 java.lang.String類型,如:
user=> (instance? java.lang.String "asd")
true
3、nil : 同 java中的null,python中的None。如果用在條件判斷中,則為false
三、函數定義和調用
在Clojure中,通過defn 來定義函數,其實defn也是一個函數,只不過是Clojure中的內建函數罷了。
如:
(defn hello [a b] (+ a b))
上面代碼定義了函數hello,有兩個參數 a 和 b, 函數體是一個求兩個參數和的語句,求和結果作為調用 hello函數的傳回值。
函數體也可以有多個語句,最後一個語句的求值作為函數的傳回值,如
user=> (defn hello [a b] (+ a b) (* a b)) //定義函數
user=> (hello 3 4) //調用函數
12
在java等語言中,調用函數的文法是:methodName(arg1, arg2, arg3);
在Clojure中,調用函數的方式是 :(function-name arg1 arg2 arg3)
說明:在cloure中,函數名習慣全部是小寫字母,如果有多個單詞,則單詞之間以-串連,這點同java的習慣不同(java採用駝峰式的方式)。
四、Clojure代碼的處理過程
分為三個階段:
1、read階段: 讀取原始碼,形成一個資料結構
2、compile階段:上面的資料結構編程java位元組碼
3、run階段:位元組碼被執行
五、與其它語言的差別
相比其它的語言,如c /c++ ,java, python等,Clojure語言有幾個顯著的特點和差異。
大量使用() 和 符號前置,如 (+ 2 3) //這讓很多人不習慣
1、沒有變數的概念
無法向其它語言一樣,可以聲明一個變數,然後後續使用這個變數
1、
Clojure學習02:文法