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