المسارات
/
Elixir
Elixir
/
التمارين
/
قائمة اللغات
قائمة اللغات

قائمة اللغات

تمرين تعلّمي

مقدمة

القوائم

القوائم مدمجة في لغة 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

التعليمات

في هذا التمرين عليك تنفيذ بعض الدوال للتعامل مع قائمة من لغات البرمجة.

1. عرّف دالة تُرجع قائمة لغات فارغة

عرّف الدالة new/0 التي لا تأخذ أي وسائط وتُرجع قائمة فارغة.

LanguageList.new()
# => []

2. عرّف دالة تضيف لغة إلى القائمة

عرّف الدالة add/2 التي تأخذ وسيطين (‏_قائمة لغات_ وسلسلة نصية حرفية تمثل لغة). يجب أن تُرجع القائمة الناتجة مع إضافة اللغة الجديدة إلى مقدمة القائمة المعطاة.

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Clojure")
# => ["Clojure"]
language_list = LanguageList.add(language_list, "Haskell")
# => ["Haskell", "Clojure"]

3. عرّف دالة تحذف لغة من القائمة

عرّف الدالة 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"]

4. عرّف دالة تُرجع العنصر الأول في القائمة

عرّف الدالة 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"

5. عرّف دالة تُرجع عدد اللغات في القائمة

عرّف الدالة 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

6. عرّف دالة تحدد ما إذا كانت القائمة تتضمن لغة دالية

عرّف الدالة functional_list?/1 التي تأخذ وسيطًا واحدًا (‏_قائمة لغات_). يجب أن تُرجع قيمة منطقية. يجب أن تُرجع صحيحًا إذا كانت "Elixir" إحدى اللغات في القائمة.

language_list = LanguageList.new()
# => []
language_list = LanguageList.add(language_list, "Elixir")
# => ["Elixir"]
LanguageList.functional_list?(language_list)
# => true
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Elixir Exercism

مستعد لبدء قائمة اللغات؟

سجّل في Exercism لتتعلّم وتتقن Elixir عبر 58 مفهومًا168 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.