陣列是 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時要小心,因為它可能造成意想不到的效果。