As listas são um tipo de dado muito comum em Common Lisp. Elas são formadas por uma sequência de células cons. Cada car é um elemento da lista e cada cdr é ou a próxima célula cons ou o átomo de terminação.
Uma lista que termina com a lista vazia é chamada de "lista própria".
Uma lista que termina com um átomo que não é a lista vazia é chamada de "lista pontuada" (por causa de como ela é impressa: (cons 'a 'b) ;=> (a . b)).
Uma lista também pode ser circular se alguma célula cons 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).
Tenha cuidado ao trabalhar com listas circulares, pois permitir que elas sejam impressas sem vincular *print-circle* a t causará um laço infinito e travará o REPL (neste exemplo, ao especificar :circle t para write, *print-circle será vinculado a t).
Você pode 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 ao append, existe o nconc, que tem o mesmo resultado, mas tem o efeito colateral de modificar as listas. Tenha cuidado ao usar o nconc, pois ele pode ter efeitos surpreendentes.