https://github.com/NicolasPetton/seq.el.git
git clone 'git://github.com/NicolasPetton/seq.el.git'
seq.el provides Sequence manipulation functions that complement basic
functions provided by subr.el
. The library is included in Emacs 25.
All functions are prefixed with seq-
.
All provided functions work on lists, strings and vectors.
Functions taking a predicate or iterating over a sequence using a function as argument take the function as their first argument and the sequence as their second argument. All other functions take the sequence as their first argument.
All functions are tested in test/seq-tests.el
seq.el provides the following functions:
seq-drop
seq nThis function returns a sequence of all but the first n
elements of the sequence seq
.
seq
may be a list, vector or string and n
must be an
integer. The result is the same type of sequence as seq
.
If n
is a negative integer or zero, seq
is returned.
seq-take
seq nThis function returns a sequence of the first n
elements of
seq
.
seq
may be a list, vector or string and n
must be an
integer. The result is the same type of sequence as seq
.
If n
is a negative integer or zero, an empty sequence is
returned.
seq-take-while
pred seqThis function returns a sub-sequence of the successive elements of
seq
for which calling pred
with that element returns
non-nil.
pred
must be a one-argument function and seq
may be a
list, vector or string. The result is the same type of sequence as
seq
.
If evaluating pred
with the first element of seq
as argument
returns nil
, an empty sequence is returned.
seq-drop-while
pred seqThis function returns a sub-sequence of seq
from the first
element for which calling pred
with that element returns
nil
.
pred
must be a one-argument function and seq
may be a
list, vector or string. The result is the same type of sequence as
seq
.
If evaluating pred
with every element of seq
returns
nil
, seq
is returned.
seq-filter
pred seqThis function returns a list of all the elements in seq
for
which calling pred
with that element returns non-nil.
pred
must be a one-argument function and seq
may be a
list, vector or string.
seq-remove
pred seq
This function returns a list of all the elements in seq
for
which calling pred
with that element returns nil
.pred
must be a one-argument function and seq
may be a
list, vector or string.
seq-reduce
function seq initial-valueThis function returns the result of calling function
with
initial-value
and the first element of seq
, then calling
function
with that result and the second element of seq
,
then with that result and the third element of seq
, etc.
function
must be a two-arguments function and seq
may be a
list, vector or string.
If seq
is empty, initial-value
is returned and
function
is not called.
seq-some-p
pred seq
This function returns any element in seq
for which calling
pred
with that element returns non-nil. If successively calling
pred
with each element of seq
always returns nil
,
nil
is returned.pred
must be a one-argument function and seq
may be a
list, vector or string.
seq-every-p
pred seq
This function returns non-nil if successively calling pred
with
each element of seq
always returns non-nil, nil
otherwise.pred
must be a one-argument function and seq
may be a
list, vector or string.
seq-empty-p
seq
This function returns non-nil if the sequence seq
is empty,
nil
otherwise.seq
may be a list, vector or string.
seq-count
pred seq
This function returns the number of elements in seq
for which
calling pred
with that element returns non-nil.pred
must be a one-argument function and seq
may be a
list, vector or string.
seq-sort
pred seq
This function returns a sorted sequence of the elements of
seq
, comparing its elements with pred
. Called with two
elements of seq
, pred
should return non-nil if the first
element should sort before the second.pred
must be a two-arguments function, seq
may be a list,
vector or string.
The result is a sequence of the same type as SEQ.
seq-contains-p
seq elt testfn
This function returns the first element in seq
that equals to
elt
.Equality is defined by testfn
if non-nil or by equal
if
nil
.
seq
may be a list, vector or string.
seq-uniq
seq testfn
This function returns a list of the elements of seq
with
duplicates removed. testfn
is used to compare elements, or
equal
if testfn
is nil
.testfn
must be a two-argument function or nil
and
seq
may be a list, vector or string.
seq-subseq
seq start &optional end
This function returns a sub-sequence of seq
from start
to end
. If end
is omitted, it default to the length of
seq
. If start
or end
is negative, it counts from
the end of seq
.seq
may be a list, vector or string.
The result is the same type of sequence as seq
.
seq-concatenate
type &rest seqs
This function returns a sequence made of the concatenation of
seqs
. The result is a sequence of type type
. type
may be one of the following symbols: vector
, list
or
string
.
seq-mapcat
function sequence &optional type
This function returns the result of applying seq-concatenate
to
the result of applying function
to each element of sequence
. The
result is a sequence of type type
, or a list if type
is nil.
seq-partition
sequence n
This function returns a list of the elements of sequence
grouped
into sub-sequences of length n
. The last sequence may contain less
elements than n
. n
must be an integer. If n
is a negative integer
or 0, nil is returned.
seq-group-by
function sequence
This function separates the elements of sequence
into an alist
whose keys are the result of applying function
to each element of
sequence
. Keys are compared using equal
.
seq-intersection
seq1 seq2 &optional testfn
Return a list of the elements that appear in both seq1
and seq2
.
Equality is defined by TESTFN if non-nil or by equal
if nil.
seq-difference
seq1 seq2 &optional testfn
Return a list of the elements that appear in both seq1
but not in seq2
.
Equality is defined by TESTFN if non-nil or by equal
if nil.
seq-doseq
(var seq [result]) body…
This macro is like dolist
, except that seq
can be a list,
vector or string.
seq-doseq
is primarily useful for side-effects.
seq-let
args &rest body
Bind the variables in ARGS to the elements of SEQ then evaluate BODY.
ARGS can also include the `&rest' marker followed by a variable
name to be bound to the rest of SEQ.Since this library is in Emacs 25, contributors must have signed the Emacs Copyright assignment.
Fetch dependencies:
$ cd /path/to/seq.el
$ cask
Run the tests:
$ ./run-tests.sh