لیست یکی از انواع دادهی بسیار رایج در Common Lisp است.
لیست از دنبالهای از سلولهای cons تشکیل شده است.
هر car یک عنصر از لیست است و هر cdr یا سلول cons بعدی است یا یک اتم پایانی.
لیستی که به لیست خالی ختم میشود، «لیست صحیح» نامیده میشود.
لیستی که به اتمی ختم میشود که لیست خالی نیست، «لیست نقطهدار» نامیده میشود (بر اساس شکلی که چاپ میشود: (cons 'a 'b) ;=> (a . b)).
یک لیست همچنین میتواند دایرهای باشد، اگر cdr یکی از سلولهای cons در لیست، سلول cons دیگری در همان لیست باشد.
برای مثال: (let ((x (list 1))) (setf (cdr x) x) (write x :stream t :circle t) :done).
هنگام کار با لیستهای دایرهای احتیاط کنید، زیرا اگر اجازه دهید بدون مقید کردن *print-circle* به t چاپ شوند، یک حلقهی بینهایت رخ میدهد و REPL قفل میشود (در این مثال، با تعیین :circle t برای write، متغیر *print-circle به t مقید میشود).
میتوانید append را با هر تعداد لیست، از جمله ۱ یا ۰، فراخوانی کنید:
(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 احتیاط کنید، چون ممکن است اثرهای غافلگیرکنندهای داشته باشد.