Elisp: Sequence Functions

By Xah Lee. Date: . Last updated: .

The Sequence library seq.el

seq.el is a library of functions on Sequence Type .

seq.el is new in Emacs 25 (date 2016)

seq.el is loaded when emacs starts.

Most of the functions provide new functionalities, some gives a unified interface to old functions e.g. length, mapcar, mapc, elt .

Is Sequence

Length

Get nth

seq-elt

get nth element. (index start at 0)

similar to elt

(seq-elt [0 1 2 3] 2)
;; 2
seq-first

get the first element

(seq-first [3 4 5])
;; 3

Get Rest

seq-rest

return the rest elements.

(seq-rest (vector 3 4 5))
;; [4 5]

(seq-rest (list 3 4 5))
;; (4 5)

;; demo that it return a new copy
(let (xa xb)
  (setq xa (list 3 4 5))
  (print (format "xa is %s" xa))
  (setq xb (seq-rest xa))
  (print (format "xb is %s" xb))
  (pop xb)
  (print (format "xb is %s" xb))
  (print (format "xa is %s" xa)))

;; "xa is (3 4 5)"
;; "xb is (4 5)"
;; "xb is (5)"
;; "xa is (3 4 5)"

Remove nth

seq-remove-at-position

(seq-remove-at-position SEQUENCE N)

remove item at index n.

(seq-remove-at-position [3 4 5] 1)
;; [3 5]

Copy Sequence

copy-sequence

make a shallow copy. (if a element is a list, vector, record, they are not copied, but share reference with the original )

;; demo seq-copy is shallow copy

(setq xx [3 4 [5 6]])

(setq xnew (seq-copy xx ))
;; [3 4 [5 6]]

;; set 9 to the element 5 in xnew
(aset (aref xnew 2) 0 9)
;; 9

xnew
;; [3 4 [9 6]]

;; original is also changed
xx
[3 4 [9 6]]

Reference

Emacs Lisp, sequence functions

Emacs Lisp, Vector

Emacs Lisp, list

Special Lists

List Structure