Clojure學習02:文法

來源:互聯網
上載者:User

標籤:

相比我們傳統的 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:文法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.