Next: Searching Sequences, Previous: Mapping over Sequences, Up: Sequences [Contents][Index]
This section describes a number of Common Lisp functions for operating on sequences.
This function returns a given subsequence of the argument sequence, which may be a list, string, or vector. The indices start and end must be in range, and start must be no greater than end. If end is omitted, it defaults to the length of the sequence. The return value is always a copy; it does not share structure with sequence.
As an extension to Common Lisp, start and/or end
may be negative, in which case they represent a distance back
from the end of the sequence. This is for compatibility with
Emacs’s substring
function. Note that cl-subseq
is
the only sequence function that allows negative
start and end.
You can use setf
on a cl-subseq
form to replace a
specified range of elements with elements from another sequence.
The replacement is done as if by cl-replace
, described below.
This function concatenates the argument sequences together to
form a result sequence of type result-type, one of the
symbols vector
, string
, or list
. The
arguments are always copied, even in cases such as
(cl-concatenate 'list '(1 2 3))
where the result is
identical to an argument.
This function fills the elements of the sequence (or the specified part of the sequence) with the value item.
This function copies part of seq2 into part of seq1. The sequence seq1 is not stretched or resized; the amount of data copied is simply the shorter of the source and destination (sub)sequences. The function returns seq1.
If seq1 and seq2 are eq
, then the replacement
will work correctly even if the regions indicated by the start
and end arguments overlap. However, if seq1 and seq2
are lists that share storage but are not eq
, and the
start and end arguments specify overlapping regions, the effect
is undefined.
This returns a copy of seq with all elements matching
item removed. The result may share storage with or be
eq
to seq in some circumstances, but the original
seq will not be modified. The :test
, :test-not
,
and :key
arguments define the matching test that is used;
by default, elements eql
to item are removed. The
:count
argument specifies the maximum number of matching
elements that can be removed (only the leftmost count matches
are removed). The :start
and :end
arguments specify
a region in seq in which elements will be removed; elements
outside that region are not matched or removed. The :from-end
argument, if true, says that elements should be deleted from the
end of the sequence rather than the beginning (this matters only
if count was also specified).
This deletes all elements of seq that match item.
It is a destructive operation. Since Emacs Lisp does not support
stretchable strings or vectors, this is the same as cl-remove
for those sequence types. On lists, cl-remove
will copy the
list if necessary to preserve the original list, whereas
cl-delete
will splice out parts of the argument list.
Compare append
and nconc
, which are analogous
non-destructive and destructive list operations in Emacs Lisp.
The predicate-oriented functions cl-remove-if
, cl-remove-if-not
,
cl-delete-if
, and cl-delete-if-not
are defined similarly.
This function returns a copy of seq with duplicate elements
removed. Specifically, if two elements from the sequence match
according to the :test
, :test-not
, and :key
arguments, only the rightmost one is retained. If :from-end
is true, the leftmost one is retained instead. If :start
or
:end
is specified, only elements within that subsequence are
examined or removed.
This function deletes duplicate elements from seq. It is
a destructive version of cl-remove-duplicates
.
This function returns a copy of seq, with all elements
matching old replaced with new. The :count
,
:start
, :end
, and :from-end
arguments may be
used to limit the number of substitutions made.
This is a destructive version of cl-substitute
; it performs
the substitution using setcar
or aset
rather than
by returning a changed copy of the sequence.
The functions cl-substitute-if
, cl-substitute-if-not
,
cl-nsubstitute-if
, and cl-nsubstitute-if-not
are defined
similarly. For these, a predicate is given in place of the
old argument.
Next: Searching Sequences, Previous: Mapping over Sequences, Up: Sequences [Contents][Index]