As listas são um tipo de dados muito comum em Common Lisp.
São constituídas por uma sequência de células cons.
Cada car é um elemento da lista e cada cdr é ou a célula cons seguinte ou um átomo terminal.
Uma lista que termina na lista vazia chama-se «lista própria».
Uma lista que termina num átomo que não é a lista vazia chama-se «lista pontilhada» (devido à forma como é impressa: (cons 'a 'b) ;=> (a . b)).
Uma lista também pode ser circular se a célula cons de algum ponto da lista for o cdr de uma célula cons posterior.
Por exemplo: (let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done).
Tem cuidado ao trabalhar com listas circulares, porque permitir que sejam impressas sem ligar *print-circle* a t provoca um ciclo infinito e bloqueia o REPL (neste exemplo, ao especificar :circle t em write, *print-circle fica ligado a t).
Podes chamar append com qualquer número de listas, incluindo 1 ou 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) ; => ()
Como alternativa a append existe nconc, que dá o mesmo resultado, mas tem como efeito secundário a modificação das listas. Deves ter cuidado ao usar nconc, pois pode ter efeitos surpreendentes.