Книга: Practical Common Lisp
Whole Sequence Manipulations
Whole Sequence Manipulations
A handful of functions perform operations on a whole sequence (or sequences) at a time. These tend to be simpler than the other functions I've described so far. For instance, COPY-SEQ
and REVERSE
each take a single argument, a sequence, and each returns a new sequence of the same type. The sequence returned by COPY-SEQ
contains the same elements as its argument while the sequence returned by REVERSE
contains the same elements but in reverse order. Note that neither function copies the elements themselves—only the returned sequence is a new object.
The CONCATENATE
function creates a new sequence containing the concatenation of any number of sequences. However, unlike REVERSE
and COPY-SEQ
, which simply return a sequence of the same type as their single argument, CONCATENATE
must be told explicitly what kind of sequence to produce in case the arguments are of different types. Its first argument is a type descriptor, like the :element-type
argument to MAKE-ARRAY
. In this case, the type descriptors you'll most likely use are the symbols VECTOR
, LIST
, or STRING
.[127] For example:
(concatenate 'vector #(1 2 3) '(4 5 6)) ==> #(1 2 3 4 5 6)
(concatenate 'list #(1 2 3) '(4 5 6)) ==> (1 2 3 4 5 6)
(concatenate 'string "abc" '(#d #e #f)) ==> "abcdef"