در Clojure، لیستها یک مجموعه هستند، درست مانند لیستها در زبانهای دیگر. مشابه دیگر زبانهای خانوادهی Lisp، Clojure از پرانتز برای بیان لیستها استفاده میکند.
لیستهای Clojure به یکی از دو روش ساخته میشوند. تابع list میتواند یک لیست بسازد، یا میتوانید با quote یک لیست تحتاللفظی بنویسید.
لیستها خاصاند چون Clojure با آنها همچون فراخوانی رفتار میکند. انتظار دارد که فراخوانی با یک عملگر شروع شود، که معمولاً یک تابع است. بقیهی عنصرهای لیست عملوند در نظر گرفته میشوند، یعنی به آرگومانهای تابع تبدیل میشوند.
رفتار ویژهی Clojure با لیستها دلیل آن است که نمیتوانیم مستقیماً یک لیست تحتاللفظی بسازیم. استفاده از quote یا شکل کوتاه آن ' برای یک لیست نشان میدهد که آن لیست نباید ارزیابی شود.
برخلاف برخی زبانهای مدرن، لیستهای Clojure ناهمگون هستند، یعنی میتوانند چندین نوع عنصر را درون خود نگه دارند، مثلاً '(2 "a" "b" 3).
برخلاف دیگر Lispها، یک لیست خالی در Clojure «درست» به شمار میآید و با nil یا false همارز نیست.
در این تمرین، کدی مینویسید که فهرستی از زبانهای برنامهنویسی را که قصد دارید از پلتفرم Exercism تمرین کنید، پردازش میکند.
شش کار دارید.
پیش از آنکه بتوانید زبانی اضافه کنید، باید کار را با ساختن یک فهرست جدید شروع کنید. تابعی تعریف کنید که یک فهرست خالی برمیگرداند.
(new-list)
;; => ()
وقتی Exercism را کاوش میکنید و زبانهایی را پیدا میکنید که میخواهید یاد بگیرید، باید بتوانید آنها را به فهرستتان اضافه کنید. تابعی تعریف کنید که یک زبان جدید را به ابتدای فهرستتان اضافه کند.
(add-language '("Clojurescript") "JavaScript")
;; => '("JavaScript" "Clojurescript")
میخواهید بهسرعت بررسی کنید کدام زبان را همین الان اضافه کردهاید. تابعی تعریف کنید که اولین زبان فهرستتان را برمیگرداند.
(first-language '("Haskell" "Python"))
;; => "Haskell"
گاهی دربارهی زبانی که همین الان اضافه کردهاید نظرتان عوض میشود. تابعی تعریف کنید که اولین زبان را از فهرستتان حذف کند.
(remove-language '("Common Lisp" "Racket" "Scheme"))
;; => '("Racket" "Scheme")
شمردن زبانها یکییکی کار دشواری است. تابعی تعریف کنید که تعداد زبانهای فهرستتان را بشمارد.
(count-languages '("C#" "Racket" "Rust" "Ruby"))
;; => 4
تابعی به اسم learning-list تعریف کنید و در آن از برخی از توابعی که در بالا تعریف کردید استفاده کنید.
یک فهرست خالی بسازید.
۲ زبان برنامهنویسی جدید به فهرست اضافه کنید.
«Lisp» را از فهرست حذف کنید، چون ممکن است امسال وقت کافی برایش نداشته باشید و شباهت زیادی به Clojure دارد.
۲ زبان برنامهنویسی دیگر به فهرست اضافه کنید.
تعداد کل زبانها را برگردانید. راهنما: باید ۳ باشد.
(learning-list)
;; => 3