Clojure序列:强大的统一数据处理工具
1. 一切皆为序列
在Clojure中,每个聚合数据结构都可以被视为一个序列。序列具有三个核心能力:
- 获取序列的第一个元素:使用 first
函数,若参数为空或为 nil
,则返回 nil
。
- 获取序列中除第一个元素之外的其余元素:使用 rest
函数,若没有更多元素,返回一个空序列(而非 nil
)。
- 在现有序列的前面添加一个元素来构造一个新序列:使用 cons
函数。
这些能力在Java接口 clojure.lang.ISeq
中声明。同时, seq
函数可以将任何可转换为序列的集合转换为序列,若集合为空或为 nil
,则返回 nil
。 next
函数返回序列中除第一个元素之外的其余元素的序列,它等价于 (seq (rest aseq))
。
以下是一些示例代码:
(first '(1 2 3)) ; -> 1
(rest '(1 2 3)) ; -> (2 3)
(cons 0 '(1 2 3)) ; -> (0 1 2 3)
在Clojure中,这些函数不仅适用于列表,还适用于其他数据结构,如向