Common Lispには、戻り値を作り出すために元々の構造を破壊する関数があります。
sort、stable-sort を除く破壊的な関数には対応する非破壊的な関数があるので、基本的には非破壊版を利用しておいたほうが良さそうです。
なお、破壊的関数の先頭に付く n は non-consing の略だそうです。
詳しくは 実践Common Lispの12章 あたりを見ると良いでしょう。
| 非破壊的 | 破壊的 | 概要 | 
| sort | ソート | |
| stable-sort | 安定ソート | |
| reverse | nreverse | リストの反転 | 
| append | nconc | リストの結合 | 
| revappend | nreconc | リストの結合 | 
| butlast | nbutlast | リストの末尾以外取得 | 
| remove | delete | シーケンスの要素削除 | 
| remove-if | delete-if | 条件に一致する要素削除 | 
| remove-if-not | delete-if-not | 条件に一致しない要素削除 | 
| remove-duplicates | delete-duplicates | 重複を削除 | 
| union | nunion | 和集合 | 
| intersection | nintersection | 積集合 | 
| set-difference | nset-difference | 差集合 | 
| set-exclusive-or | nset-exclusive-or | 対称差 | 
| string-capitalize | nstring-capitalize | 単語の先頭を大文字、それ以外を小文字に変換 | 
| string-downcase | nstring-downcase | 文字列を小文字に変換 | 
| string-upcase | nstring-upcase | 文字列を大文字に変換 | 
| subst | nsubst | 木構造(リスト)の要素を変更 | 
| subst-if | nsubst-if | 木構造(リスト)の要素を変更 | 
| subst-if-not | nsubst-if-not | 木構造(リスト)の要素を変更 | 
| sublis | nsublis | 木構造(リスト)の要素を変更 | 
| substitute | nsubstitute | シーケンスの要素を変更 | 
| substitute-if | nsubstitute-if | シーケンスの要素を変更 | 
| substitute-if-not | nsubstitute-if-not | シーケンスの要素を変更 | 
