clojure-数据结构
nil、真值和假值
- Clojure的nil等价于Java中的null和Ruby中的nil。在nil值上调用一个函数可能导致NullPointerException异常
- 除了false和nil之外,其他都被视为真值
字符和字符串
- Clojure使用读取宏反斜杠来表示字符,如\a或\b
- 字符串使用双引号表示
数值
大部分时候,在Clojure中使用的数值都是64位整数或64位浮点数。范围较小的整数运算产生较大结果时,会产生溢出现象,则此时可将其提升为大整数,使用一组替代函数:+’、-’、*’、inc’、dec’
- 整数:Long
- 大整数:bigint
- 比例:rationalize,如:1/3
- 大十进制数:bigdec
- 浮点:double
符号和关键字
符号是Clojure程序中的标识符,代表值的名称。如(+ 1 2),+代表加法函数的符号
符号通常解析为不是符号的其他内容。可以通过一个前导的单引号,将其表示为一个值而不是符号
关键字类似于符号加单引用,以冒号开头,如::itaha。典型用法是作为哈希映射中的键和枚举值
可以用keyword和symbol函数从字符串中构造关键字和符号
列表
Clojure中的列表是单链表,这意味着你只能从列表的头部删除或添加元素,也意味着不同的列表可以共享相同的尾部
-
使用list函数创建列表
-
使用conj函数创建一个新列表, 并添加值
-
使用first或peek函数获取头部第一个元素,使用rest或pop函数获除头部第一个元素剩下的元素,使用count函数计算列表元素个数
每个Clojure代码表达式都是一个列表,列表中出现的第一个元素为函数或宏的名称,后面的元素为函数参数
向量
向量用方括号表示,用数字作为索引
-
用vector创建向量,或用方括号直接创建向量
-
使用索引取出向量中的元素
-
使用assoc函数添加或修改向量元素
映射
映射由键-值对序列组成,用花括号表示
- 创建映射
- 获取映射元素,映射本身或关键字都是函数
- 修改映射元素,使用assoc和dissoc函数