在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