یک List در Elm مجموعهای تغییرناپذیر از صفر یا چند مقدار از نوع یکسان است.
لیستها را میتوان به شکل زیر تعریف کرد:
empty = []
singleValue = [ 5 ]
threeValues = [ "a", "b", "c" ]
رایجترین راه برای افزودن یک عنصر به لیست، استفاده از عملگر :: (cons) است:
twoToFour = [ 2, 3, 4 ]
oneToFour = 1 :: twoToFour --> [ 1, 2, 3, 4 ]
لیستها با توابع و عملگرهای تعریفشده در ماژول List یا با تطبیق الگو دستکاری میشوند.
describe : List String -> String
describe list =
case list of
[] ->
"Empty list"
[ "hello" ] ->
"Singleton list with: hello"
x :: xs ->
"Non-empty list with head: " ++ x
describe [] --> "Empty list"
describe [ "hello" ] --> "Singleton list with: hello"
describe [ "hello", "world" ] --> "Non-empty list with head: hello"
در این تمرین کدی مینویسید تا لیست زبانهای برنامهنویسی را که میخواهید در Exercism یاد بگیرید، پیگیری کنید. شش وظیفه دارید و همهی آنها به کار با لیستها مربوط میشوند.
برای پیگیری زبانهایی که میخواهید یاد بگیرید، باید یک لیست جدید بسازید.
ثابت newList را تعریف کنید که شامل یک لیست جدید و خالی است.
newList
--> []
در حال حاضر، تکهکاغذی دارید که زبانهایی را که میخواهید یاد بگیرید روی آن نوشته شده است: Elm، Clojure و Haskell.
ثابت existingList را تعریف کنید تا این لیست را نشان دهد.
existingList
--> [ "Elm", "Clojure", "Haskell" ]
همانطور که Exercism را کاوش میکنید و زبانهای جالبتری پیدا میکنید، میخواهید آنها را به لیستتان اضافه کنید.
تابع addLanguage را پیادهسازی کنید تا یک زبان جدید را به ابتدای لیستتان اضافه کند.
addLanguage "TypeScript" [ "JavaScript", "CoffeeScript" ]
--> [ "TypeScript", "JavaScript", "CoffeeScript" ]
شمردن زبانها بهصورت دستی چندان راحت نیست.
تابع countLanguages را پیادهسازی کنید تا تعداد زبانهای روی لیستتان را بشمارد.
countLanguages [ "C#", "Racket", "Rust", "Ruby" ]
--> 4
یک جا متوجه میشوید که لیستتان در واقع برعکس مرتب شده است!
تابع reverseList را پیادهسازی کنید تا لیستتان را برعکس کند.
reverseList [ "Prolog", "C", "Idris", "Assembly" ]
--> [ "Assembly", "Idris", "C", "Prolog" ]
با اینکه همهی زبانها را دوست دارید، Elm جایگاه ویژهای در قلب شما دارد. به همین دلیل، از یک لیست زبان واقعاً هیجانزده میشوید اگر:
تابع excitingList را پیادهسازی کنید تا بررسی کند که آیا یک لیست زبان هیجانانگیز است:
excitingList [ "Nim", "Elm" ]
--> True