A listák nagyon gyakori adattípus a Common Lispben.
cons cellák sorozatából épülnek fel.
Minden car a lista egy eleme, minden cdr pedig vagy a következő cons cella, vagy egy lezáró atom.
Az olyan listát, amely az üres listával zárul, „szabályos listának” nevezzük.
Az olyan listát, amely az üres listától különböző atommal zárul, „pontozott listának” nevezzük (arról kapta a nevét, hogyan íródik ki: (cons 'a 'b) ;=> (a . b)).
Egy lista körkörös is lehet, ha a listában valamely cons cella egy későbbi cons cella cdr-je.
Például: (let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done).
A körkörös listákkal óvatosan bánj, mert ha úgy íratod ki őket, hogy közben a *print-circle* változót nem kötötted t-re, végtelen ciklusba kerül, és lefagy a REPL (ebben a példában a write függvénynek átadott :circle t miatt a *print-circle t-re lesz kötve).
Az append függvényt tetszőleges számú listával meghívhatod, akár 1-gyel vagy 0-val is:
(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) ; => ()
Az append alternatívája a nconc, amely ugyanazt az eredményt adja, de mellékhatásként módosítja a listákat. Legyél óvatos a nconc használatakor, mert meglepő hatásai lehetnek.