リストを逆順にする - lisp-cookbook-ja/common-lisp GitHub Wiki

リスト

リストを逆順にするには reverse 関数を使います。

(reverse '(1 2 3 4)) ; => (4 3 2 1)
(reverse '()) ; => ()

Lisp系言語 では計算結果をリストの先頭に逐次 cons して行き、逆となっているものを最後に reverse するというイディオムがよく使われます。Lispのリスト構造の性質上、リストの末尾への追加とちがい先頭への追加は高速に処理できるためです。

(defun map1 (fn xs)
  (do ((xs xs (cdr xs))
       (rs () (cons (funcall fn (car xs)) rs)))
      ((endp xs) (nreverse rs)))) ; nreverse はreverseの破壊版

(map1 #'1+ '(1 2 3 4))
;=> (2 3 4 5)