Clojure學習02:語法

相比咱們傳統的 c ,java ,python ,javascript等,Clojure的語法比較特別,初一看,還可能會有些不適應。javascript

本文來介紹下Clojure的語法特色。java

1、表達式python

全部的Clojure代碼都是由表達式組成的,每一個表達式都會產生一個值。c++

常見的表達式如:編程

 60數據結構

[2  4  6]函數

(+ 1 2)ip

(average [2 3 4])字符串

1)上面的第一個表達式就是一個字面常量,這裏是一個整數。io

2)第二個是個整數序列。

3)第3和4 都是函數調用,Clojure中,小括號 () 表示函數調用,括號中的第一個值是函數名,剩下的值是參數,整個調用表達式被求值的結果做爲調用的返回值。

在Clojure中,相似其它語言的運算符,均可以看作是函數,這也爲什麼上面例子中的 (+ 1 2) 這個表達式中 + 號放在前面的緣由。

 

2、常量

一、布爾:  true  false  注意是區分大小寫的

二、字符串:同java同樣,雙引號擴起,就是 java.lang.String類型,如:

user=> (instance? java.lang.String "asd")
true

三、nil :  同 java中的null,python中的None。若是用在條件判斷中,則爲false

 

3、函數定義和調用

在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採用駝峯式的方式)。

 

4、Clojure代碼的處理過程

分爲三個階段:

一、read階段: 讀取源代碼,造成一個數據結構

二、compile階段:上面的數據結構編程java字節碼

三、run階段:字節碼被執行

 

5、與其它語言的差異

相比其它的語言,如c /c++ ,java, python等,Clojure語言有幾個顯著的特色和差別。

大量使用()  和  符號前置,如  (+ 2 3)  //這讓不少人不習慣

一、沒有變量的概念

沒法向其它語言同樣,能夠聲明一個變量,而後後續使用這個變量

 

 

 

一、

相關文章
相關標籤/搜索