[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
In Emacs Lisp, a sequence is either a list or an array. The common property of all sequences is that they are ordered collections of elements. This section describes functions that accept any kind of sequence.
t
if object is a list, vector, or
string, nil
otherwise.
nil
), a wrong-type-argument
error is
signaled.
See section 5.4 Accessing Elements of Lists, for the related function safe-length
.
(length '(1 2 3)) => 3 (length ()) => 0 (length "foobar") => 6 (length [1 2 3]) => 3 (length (make-bool-vector 5 nil)) => 5 |
nil
;
otherwise, they trigger an args-out-of-range
error.
(elt [1 2 3 4] 2) => 3 (elt '(1 2 3 4) 2) => 3 ;; We use |
This function generalizes aref
(see section 6.3 Functions that Operate on Arrays) and
nth
(see section 5.4 Accessing Elements of Lists).
Storing a new element into the copy does not affect the original
sequence, and vice versa. However, the elements of the new
sequence are not copies; they are identical (eq
) to the elements
of the original. Therefore, changes made within these elements, as
found via the copied sequence, are also visible in the original
sequence.
If the sequence is a string with text properties, the property list in the copy is itself a copy, not shared with the original's property list. However, the actual values of the properties are shared. See section 32.19 Text Properties.
See also append
in 5.5 Building Cons Cells and Lists, concat
in
4.3 Creating Strings, and vconcat
in 6.4 Vectors, for other
ways to copy sequences.
(setq bar '(1 2)) => (1 2) (setq x (vector 'foo bar)) => [foo (1 2)] (setq y (copy-sequence x)) => [foo (1 2)] (eq x y) => nil (equal x y) => t (eq (elt x 1) (elt y 1)) => t ;; Replacing an element of one sequence. (aset x 0 'quux) x => [quux (1 2)] y => [foo (1 2)] ;; Modifying the inside of a shared element. (setcar (aref x 1) 69) x => [quux (69 2)] y => [foo (69 2)] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |