配列は、Common Lispでとてもよく使われるデータ型です。配列はconsセルの並びからできています。それぞれのcarが配列の要素で、それぞれのcdrは、次のconsセルか、終端となるアトムのどちらかです。
空の配列で終わる配列を「正しい配列」と呼びます。
空の配列ではないアトムで終わる配列は「ドット付き配列」と呼びます(表示のされ方による呼び名で、(cons 'a 'b) ;=> (a . b)のように表示されます)。
また、配列の中のあるconsセルのcdrが、より後ろにあるconsセルを指していると、その配列は循環配列になります。例えば、次のとおりです:(let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done)。循環配列を扱うときは注意してください。*print-circle*をtに束縛せずに表示すると、無限ループに陥り、REPLが固まってしまいます(この例では、writeに:circle tを指定することで、*print-circleがtに束縛されます)。
appendは、1つや0個の場合も含め、いくつでも配列を渡して呼び出せます:
(append '(a b c) '(1 2 3)) ; => (A B C 1 2 3)
(append '(a b c) '())) ; => (A B C)
(append '(a b c)) ; => (A B C)
(append) ; => ()
appendの代わりにnconcを使うこともできます。結果は同じですが、配列を書き換えてしまうという副作用があります。nconcを使うときは、思わぬ結果になることがあるので気をつけてください。