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),+代表加法函数的符号

符号通常解析为不是符号的其他内容。可以通过一个前导的单引号,将其表示为一个值而不是符号
clojure-数据结构

关键字类似于符号加单引用,以冒号开头,如::itaha。典型用法是作为哈希映射中的键和枚举值

可以用keyword和symbol函数从字符串中构造关键字和符号
clojure-数据结构

列表

Clojure中的列表是单链表,这意味着你只能从列表的头部删除或添加元素,也意味着不同的列表可以共享相同的尾部

  • 使用list函数创建列表

  • 使用conj函数创建一个新列表, 并添加值
    clojure-数据结构

  • 使用first或peek函数获取头部第一个元素,使用rest或pop函数获除头部第一个元素剩下的元素,使用count函数计算列表元素个数
    clojure-数据结构

每个Clojure代码表达式都是一个列表,列表中出现的第一个元素为函数或宏的名称,后面的元素为函数参数

向量

向量用方括号表示,用数字作为索引

  • 用vector创建向量,或用方括号直接创建向量
    clojure-数据结构

  • 使用索引取出向量中的元素
    clojure-数据结构

  • 使用assoc函数添加或修改向量元素
    clojure-数据结构

映射

映射由键-值对序列组成,用花括号表示

  • 创建映射
    clojure-数据结构
  • 获取映射元素,映射本身或关键字都是函数
    clojure-数据结构
  • 修改映射元素,使用assoc和dissoc函数
    clojure-数据结构