Function: nreverse
nreverse is a function defined in fns.c.
Signature
(nreverse SEQ)
Documentation
Reverse order of items in a list, vector or string SEQ.
If SEQ is a list, it should be nil-terminated. This function may destructively modify SEQ to produce the value.
Source Code
// Defined in /usr/src/emacs/src/fns.c
{
if (NILP (seq))
return seq;
else if (STRINGP (seq))
return Freverse (seq);
else if (CONSP (seq))
{
Lisp_Object prev, tail, next;
for (prev = Qnil, tail = seq; CONSP (tail); tail = next)
{
next = XCDR (tail);
/* If SEQ contains a cycle, attempting to reverse it
in-place will inevitably come back to SEQ. */
if (EQ (next, seq))
circular_list (seq);
Fsetcdr (tail, prev);
prev = tail;
}
CHECK_LIST_END (tail, seq);
seq = prev;
}
else if (VECTORP (seq))
{
ptrdiff_t i, size = ASIZE (seq);
for (i = 0; i < size / 2; i++)
{
Lisp_Object tem = AREF (seq, i);
ASET (seq, i, AREF (seq, size - i - 1));
ASET (seq, size - i - 1, tem);
}
}
else if (BOOL_VECTOR_P (seq))
{
ptrdiff_t i, size = bool_vector_size (seq);
for (i = 0; i < size / 2; i++)
{
bool tem = bool_vector_bitref (seq, i);
bool_vector_set (seq, i, bool_vector_bitref (seq, size - i - 1));
bool_vector_set (seq, size - i - 1, tem);
}
}
else
wrong_type_argument (Qarrayp, seq);
return seq;
}