Function: reverse
reverse is a function defined in fns.c.
Signature
(reverse SEQ)
Documentation
Return the reversed copy of list, vector, or string SEQ.
See also the function nreverse, which is used more often.
Other relevant functions are documented in the string group.
Shortdoc
;; string
(reverse "foo")
=> "oof"
Aliases
string-reverse (obsolete since 25.1)
Source Code
// Defined in /usr/src/emacs/src/fns.c
{
Lisp_Object new;
if (NILP (seq))
return Qnil;
else if (CONSP (seq))
{
new = Qnil;
FOR_EACH_TAIL (seq)
new = Fcons (XCAR (seq), new);
CHECK_LIST_END (seq, seq);
}
else if (VECTORP (seq))
{
ptrdiff_t i, size = ASIZE (seq);
new = make_uninit_vector (size);
for (i = 0; i < size; i++)
ASET (new, i, AREF (seq, size - i - 1));
}
else if (BOOL_VECTOR_P (seq))
{
EMACS_INT nbits = bool_vector_size (seq);
new = make_clear_bool_vector (nbits, true);
for (ptrdiff_t i = 0; i < nbits; i++)
if (bool_vector_bitref (seq, nbits - i - 1))
bool_vector_set (new, i, true);
}
else if (STRINGP (seq))
{
ptrdiff_t size = SCHARS (seq), bytes = SBYTES (seq);
if (size == bytes)
{
ptrdiff_t i;
new = make_uninit_string (size);
for (i = 0; i < size; i++)
SSET (new, i, SREF (seq, size - i - 1));
}
else
{
unsigned char *p, *q;
new = make_uninit_multibyte_string (size, bytes);
p = SDATA (seq), q = SDATA (new) + bytes;
while (q > SDATA (new))
{
int len, ch = string_char_and_length (p, &len);
p += len, q -= len;
CHAR_STRING (ch, q);
}
}
}
else
wrong_type_argument (Qsequencep, seq);
return new;
}