在Clojure中,全部的語法規則最終都是S表達式。咱們如何知道哪些是判斷語句呢?這個很簡單,clojure中(lisp習慣)有個規定:對於判斷功能的函數,函數名後面都有一個「?」號。因此咱們只要看到後面帶問號的函數名,就知道這必定是一個判斷語句。很簡單吧! java
例如 "fn?"這個函數用於判斷傳入的參數是不是一個函數: ios
=>(fn? reduce) true =>(fn? 42) false
Clojure支持很是豐富的數字類型的數據。每一種數字類型都提供了不一樣的計算精度,固然也佔用不一樣的內存空間。當咱們選擇不一樣的數據類型時,精度、內存消耗這些因素對計算的性能和準確度有着相當重要的影響。因此咱們必須對不一樣的數據類型有着深刻的瞭解。 shell
=>42 42 ;;整形 =>(class 42) java.lang.Integer ;;判斷是不是數字 =>(number? 42) true ;;判斷是不是整形 =>(integer? 42) true =>21.42 21.42 ;;查看類型 =>(class 21.42) java.lang.Double ;;判斷是不是數字 =>(number? 21.42) true ;;判斷是不是整形 =>(integer? 21.42) false
整形和浮點型在其餘語言中都是常見的數據類型。可是分數(ratios)這種就很是少見了。在Clojure中,你能夠將二分之一寫成1/2,固然也能夠用0.5。 函數
=>1/2 1/2 =>(class 1/2) clojure.lang.Ratio =>(ratio? 1/2) true =>(* 1/2 1.0) 0.5使用ratios類型的好處:
在進行數據計算時,特別是使用大量的除法時,咱們可使用分數形式。等到獲得最終的結果後,咱們在對分數求值。這樣最大的減小精度損失。(一旦遇到沒法整除的除法運算都極可能減小精度)。 性能
字符表明一個字母、一個數字、一個標點符號或者其餘符號。在Clojure中,符號使用反斜槓「\」做爲開始。 spa
=>\C \C =>(class \C) java.lang.Character =>(char? \C) true
字符組成一塊兒就是字符串。字符串使用雙引號括起來(這招很通用)。 code
=>"some characters in a string" "some characters in a string" =>(class "some characters in a string") java.lang.String =>(string? "some characters in a string") true =>(str \C) "C"
符號被做爲一種標示符。爲了經常使用目的常常綁定到數據或者函數上。符號以前說過了,用單引號" ' "開頭,或者使用quote函數。 內存
=>'stuff stuff => (quote stuff) stuff =>(class 'stuff) clojure.lang.Symbol =>(symbol? 'stuff) true符號也可經過字符串來建立:
=>(symbol "more stuff") more stuff =>(class (symbol "more stuff")) clojure.lang.Symbol
關鍵字是另外一種類型的符號,它不適用於數據綁定的。關鍵字主要用於匹配。例如在哈希表中做爲key,它比使用字符串做爲key檢索起來要快的多。關鍵字以冒號」:「開頭。 字符串
=>:stuff :stuff =>(class :stuff) clojure.lang.Keyword =>(keyword? :stuff) true關鍵字也能夠經過字符串來建立:
=>(keyword "stuff") :stuff =>(class (keyword "stuff")) clojure.lang.Keyword
這個太直觀了。就倆值:true 和 false string
=>true true =>false false =>(class true) java.lang.Boolean =>(class false) java.lang.Boolean