لیستها در زبان Elixir توکار هستند. آنها یک نوع پایه در نظر گرفته میشوند که با کروشه نشان داده میشوند. لیستها میتوانند خالی باشند یا هر تعداد عنصری از هر نوعی را در خود نگه دارند. برای مثال:
empty_list = []
one_item_list = [1]
two_item_list = [1, 2]
multiple_type_list = [1, :pi, 3.14, "four"]
Elixir لیستها را به صورت یک لیست پیوندی پیادهسازی میکند که هر گره در آن دو مقدار را ذخیره میکند: اولین عنصر و لیست دیگری که همهی عناصر باقیمانده را در خود دارد. به اولین عنصر لیست، «سر» و به لیست باقیماندهی عناصر، «دم» میگویند. میتوانیم از این نماد در کد استفاده کنیم:
# [1] represented in [head | tail] notation
[1 | []]
# [1, 2, 3] represented in [head | tail] notation
[1 | [2 | [3 | []]]]
میتوانیم با نماد [head | tail] عنصرها را به ابتدای لیست اضافه کنیم:
# Suppose
list = [2, 1]
[3, 2, 1] == [3 | list]
# => true
در ماژول Kernel چندین تابع برای کار با لیستها وجود دارد، و همچنین کل ماژول List.
# Check if 1 is a member of the list
1 in [1, 2, 3, 4]
# => true
در این تمرین باید چند تابع پیادهسازی کنید تا فهرستی از زبانهای برنامهنویسی را دستکاری کنند.
تابع new/0 را تعریف کنید که هیچ آرگومانی نمیگیرد و یک فهرست خالی برمیگرداند.
LanguageList.new()
# => []
تابع add/2 را تعریف کنید که ۲ آرگومان میگیرد (یک فهرست زبان و یک رشتهی متنی که یک زبان را نشان میدهد). باید زبان جدید را به ابتدای فهرست دادهشده اضافه کند و فهرست حاصل را برگرداند.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
تابع remove/1 را تعریف کنید که ۱ آرگومان میگیرد (یک فهرست زبان). باید فهرستی را برگرداند که اولین عنصر آن حذف شده است. فرض کنید فهرست همیشه حداقل یک عنصر دارد.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]
language_list = LanguageList.remove(language_list)
# => ["Clojure"]
تابع first/1 را تعریف کنید که ۱ آرگومان میگیرد (یک فهرست زبان). باید اولین زبان فهرست را برگرداند. فرض کنید فهرست همیشه حداقل یک عنصر دارد.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.first(language_list)
# => "Prolog"
تابع count/1 را تعریف کنید که ۱ آرگومان میگیرد (یک فهرست زبان). باید تعداد زبانهای فهرست را برگرداند.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elm")
# => ["Elm"]
language_list = LanguageList.add(language_list, "Prolog")
# => ["Prolog", "Elm"]
LanguageList.count(language_list)
# => 2
تابع functional_list?/1 را تعریف کنید که ۱ آرگومان میگیرد (یک فهرست زبان). باید یک «مقدار منطقی» برگرداند. اگر «Elixir» یکی از زبانهای فهرست باشد، باید «درست» را برگرداند.
language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true