Elisp sequence

Table of Contents

List、Vector、字符串都被称为 Sequence。 seq- 开头的函数可用于处理这些类型变量。

list

列表变量
(setq a ’(“a” “b” “c” “d”))
创建列表
(list 1 2 3)
按个数创建并设置初值
(make-list 4 0)
创建序列
(number-sequence 5 10)
打印列表
(message “%S” a)
空列表等于 nil
(eq ’() nil)

获取元素:

获取首项
(car a)
获取最后一项
(car (last a))
获取指定序号项
(nth 2 a)
列表长度
(length a)

获取子列表:

从第二个到最后
(cdr a)
指定序号到最后
(nthcdr 2 a)
去除尾部多项
(butlast a 2)

合并排序:

头部合并(不修改原值)
(cons “Hi” a)
遍历操作返回结果
(mapcar ’upcase a)
遍历操作返回原列表
(mapc ’print a)
排序
(seq-sort #’< ’(1 3 2))

修改列表:

删除元素(有副作用)
(delete “b” a) ;a变了
删除元素(无副作用)
(remove “b” a) ;a不变
头部插入一个
(push “hi” a)
头部删除一个
(pop a)
尾部插入一个(有副作用)
(nconc a ’(“x”))
尾部插入一个(无副作用)
(append a ’(“x”))
删除尾部多项
(nbutlast a 2)
替换首项
(setcar a “A”)
替换除首项的后面
(setcdr a ’(“B” “C”))
指定序号设置
(setf (elt a 0) “A”)

vector

设置变量
(setq v (vector 1 2 3))
按个数创建并设置初值
(make-vector 5 0)
创建,内部不展开
[a b c]
将元素统一修改
(fillarray v 4)
类型判断(Vector 属于 Array)
(arrayp v)

获取:

获取元素(性能好)
(aref v 2)
获取元素(适用 Vector 和 List)
(elt v 2)

设置:

指定序号设置
(aset v 0 “a”)
转成 List
(append v nil)