Skip to main content
 首页 » 操作系统 » linux系统

Clojure形式与数值类型

函数式风格、对并发的强力支持以及干净的Java互操作,给Clojure提供了极其强大的力量。

形式Clojure具有同像性,lojure代码本身,是由Clojure数据构成的。

当运行一段Clojure程序,作为Clojure组成部分的读取器(reader),读入那些被称为“形式”的程序文本块,然后将它们翻译为Clojure的数据结构。接下来,Clojure编译并执行这些数据结构。

Clojure形式与数值类型  Clojure 第1张

Clojure的形式

使用数值类型数值字面量本身就是形式。数字会简单的对其自身进行求值。

42

-> 42

创建了一个包含数字1、2和3的向量。

[1 2 3]

-> [1 2 3]

列表是一种形式。一个列表可以“仅仅只是数据”,但也可以用于调用函数。

创建一个列表,它的第1项是一个Clojure函数+号。

(+ 1 2)

-> 3

Clojure对这个列表进行求值的时候,是把它当作了一次调用。

当函数名是一个单词时,前缀表示法是相当常见的。

(concat [1 2] [3 4])

-> (1 2 3 4)

Clojure只不过是像对待所有其他函数一样,把数学运算符也简单地放到起始位置罢了。

采用前缀表示法还有一个实际好处,可以很容易将其扩展为任意数量的参数。

(+ 1 2 3)

-> 6

甚至在没有参数的这种退化情况(degenerate case)下,它仍然能按照期望的那样,返回一个零。这非常有利于消除为处理边界条件而产生的特例逻辑。

-> 0

(- 10 5)

-> 5

(* 3 10 10)

-> 300

(> 5 2)

-> true

(>= 5 5)

-> true

(< 5 2)

-> false

(= 5 2)

-> false

除法为比例类型。

(/ 22 7)

-> 22/7

Clojure内建了一个比例(Ratio)类型。

(class (/ 22 7))

-> clojure.lang.Ratio

十进制除法,就得用浮点数的字面量来作为被除数。

(/ 22.0 7)

-> 3.142857142857143

只需要整数结果,那你可以使用quot和rem函数来获取整型的商和余数。

(quot 22 7)

-> 3

(rem 22 7)

-> 1

当需要任意精度的浮点运算时,在数字后面追加一个大写的M,就可以创建一个BigDecimal类型的字面量。

(+ 1 (/ 0.00001 1000000000000000000))

-> 1.0

(+ 1 (/ 0.00001M 1000000000000000000))

-> 1.00000000000000000000001M

为了得到任意精度的整数,可以通过在数字后面追加一个大写的 N,来创建一个BigInt类型的字面量。

(* 1000N 1000 1000 1000 1000 1000 1000)

-> 1000000000000000000000N

注意,算式中只需要一个BigInt字面量就够了,因为它会传染到整个计算过程当中。

评论列表暂无评论
发表评论
微信