فه

فهرست در Common Lisp

15 تمرین

درباره‌ی فهرست

لیست یکی از انواع داده‌ی بسیار رایج در 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 احتیاط کنید، چون ممکن است اثرهای غافلگیرکننده‌ای داشته باشد.

ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

فهرست را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین فهرست قفل 5 تمرین دیگر را باز کنید