Clojure 数据类型

开了一个新的坑,记录下之前学习clojure的笔记。

  • 基本 scalars
  • 组合 collections

数据类型的特定

  • immutable 不可变的
  • lazy 惰性加载
  • persistent 持久性

基本数据类型

  • Number(long, double, ratio)
  • Bool
  • String
  • Character
  • Symbol(符号)/Keyword(关键字) Lisp语言特有的两种类型

使用type可以得知变量的数据类型,clojure中数字默认是long类型(不同于java是int)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
(type 2)
=> java.lang.Long

(type 1/3)
=> clojure.lang.Ratio

(type 3.14)
=> java.lang.Double

(type "hello world")
=> java.lang.String

(type \a)
=> java.lang.Character

(type true)
=> java.lang.Boolean
(type false)
=> java.lang.Boolean

(type 'a)
=> clojure.lang.Symbol

(type :a)
=> clojure.lang.Keyword

nil与false

nil相当于null;
不同与C/C++,在C/C++中一般0代表false,1代表true。

Clojure中除nil和false以外,其他值均为真值(truthiness)。所以下面输出结果为true,因为0是真值。

1
2
(if 0 true false)
=> true

整型

在clojure中,整数类型不同于JAVA,java中整数类型默认是int/Integer,而clojure中是long/Long

Numbers

Clojure中的 Numbers 数据类型派生自Java类。

Clojure的Numbers类型支持整型和浮点型。

整型是不包含分数的值。

浮点型是包含小数部分的十进制值。

Numbers包含JAVA中的Byte、Double、Float、Integer、Short、Long

Ratio

Symbol & Keyword

  • Symbol标识符(identifiers),指向其他值。在macro中非常游泳
  • Keyword: 与Symbol类似,区别在于其他值指向自身,fast equality tests。一般用在map中
投食入口