مسیرها
/
Gleam
Gleam
/
تمرین‌ها
/
ترک روی ترک روی ترک
ترک روی ترک روی ترک

ترک روی ترک روی ترک

تمرین یادگیری

مقدمه

لیست

یک لیست در Gleam مجموعه‌ای تغییرناپذیر از صفر یا چند مقدار است. مقدارهای یک لیست باید همگی یک نوع داشته باشند. چون لیست‌ها تغییرناپذیرند، پس از ساخته‌شدن یک لیست، مقدارش هرگز تغییر نمی‌کند. هر تابع یا عملگری که به نظر می‌رسد لیست را تغییر می‌دهد (مثل افزودن یک عنصر)، در واقع یک لیست تازه برمی‌گرداند.

لیست‌ها را می‌توان چنین تعریف کرد:

let empty = []
let singleValue = [5]
let threeValues = ["a", "b", "c"]

رایج‌ترین راه برای افزودن یک عنصر به لیست، استفاده از «نحوه‌ی نگارش spread» است:

let two_to_four = [2, 3, 4]
let one_to_four = [1, ..two_to_four]
// -> [1, 2, 3, 4]

ماژول gleam/list در کتابخانه‌ی استاندارد Gleam توابع مفید زیادی برای کار با لیست‌ها دارد. این ماژول در کدهای Gleam بسیار پرکاربرد است، پس خوب است که با آن آشنا باشید.

از الگوهای لیست می‌توان در عبارت‌های case استفاده کرد تا با لیست‌ها تطبیق داده شوند و مقدارهای درونشان به متغیرها نسبت داده شوند:

pub fn describe(list: List(String)) -> String {
  case list {
    [] -> "Empty list"
    [x] -> "List with one item: " <> x
    [x, y] -> "List with two items: " <> x <> " and " <> y
    _ -> "List with three or more items"
  }
}

علاوه بر تطبیق با لیست‌هایی با طول دقیق، می‌توان از نحوه‌ی نگارش spread برای تطبیق با لیست‌هایی استفاده کرد که دست‌کم طول مشخصی دارند:

pub fn describe(list: List(String)) -> String {
  case list {
    [_, _, ..] -> "List with at least two items"
    [_] -> "List with one item"
    [] -> "Empty list"
  }
}

از نحوه‌ی نگارش spread همچنین می‌توان برای نسبت دادن بقیه‌ی لیست به یک متغیر استفاده کرد:

pub fn remove_first_item(list: List(String)) -> List(String) {
  case list {
    // Return the list without the first item
    [_, ..rest] -> rest

    // There's no first item to remove, return an empty list
    _ -> []
  }
}

عبارت‌های case باید برای هر مقدار ممکن از نوعی که روی آن تطبیق داده می‌شود یک الگو داشته باشند، بنابراین اغلب از یک الگوی نادیده‌گرفتن نهایی (_) برای رسیدگی به مقدارهای باقی‌مانده استفاده می‌شود.

دستورالعمل‌ها

در این تمرین، کدی می‌نویسید که فهرستی از زبان‌های برنامه‌نویسی را که می‌خواهید در Exercism یاد بگیرید پیگیری می‌کند.

شش کار پیش رو دارید که همگی به کار کردن با فهرست‌ها مربوط می‌شوند.

1. یک فهرست جدید بسازید

برای پیگیری زبان‌هایی که می‌خواهید یاد بگیرید، باید یک فهرست جدید بسازید. تابع new_list را تعریف کنید که یک فهرست جدید و خالی برمی‌گرداند.

new_list()
// -> []

2. یک فهرست موجود را تعریف کنید

در حال حاضر، تکه‌کاغذی دارید که زبان‌هایی را که می‌خواهید یاد بگیرید روی آن نوشته‌اید: Gleam، Go و TypeScript. تابع existing_list را تعریف کنید تا این فهرست را برگرداند.

existing_list()
// -> ["Gleam", "Go", "TypeScript"]

3. یک زبان جدید به فهرست اضافه کنید

همان‌طور که Exercism را کاوش می‌کنید و زبان‌های جالب‌تری پیدا می‌کنید، می‌خواهید آن‌ها را به فهرستتان اضافه کنید. تابع add_language را پیاده‌سازی کنید تا یک زبان جدید را به ابتدای فهرستتان اضافه کند.

add_language(["OCaml", "Elixir"], "Scheme")
// -> ["Scheme", "OCaml", "Elixir"]

4. زبان‌های فهرست را بشمارید

شمردن زبان‌ها یکی‌یکی دردسرساز است. تابع count_languages را پیاده‌سازی کنید تا تعداد زبان‌های فهرستتان را بشمارد.

count_languages(["jq", "Elm", "Rust", "Kotlin"])
// -> 4

5. فهرست را برعکس کنید

در نقطه‌ای متوجه می‌شوید که فهرستتان در واقع برعکس مرتب شده است! تابع reverse_list را پیاده‌سازی کنید تا فهرستتان را برعکس کند.

reverse_list(["Python", "Julia", "Idris", "COBOL"])
// -> ["COBOL", "Idris", "Julia", "Python"]

6. بررسی کنید که فهرست هیجان‌انگیز است یا نه

هرچند همه‌ی زبان‌ها را دوست دارید، Gleam جایگاه ویژه‌ای در قلب شما دارد. بنابراین، وقتی شرایط زیر برقرار باشد، از یک فهرست زبان‌ها واقعاً هیجان‌زده می‌شوید:

  • اولین عنصر فهرست Gleam باشد.
  • دومین عنصر فهرست Gleam باشد و فهرست دو یا سه زبان داشته باشد.

تابع exciting_list را پیاده‌سازی کنید تا بررسی کند که آیا فهرست زبان‌ها هیجان‌انگیز است:

exciting_list(["Lua", "Gleam"])
// -> True
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Gleam Exercism

آماده‌اید ترک روی ترک روی ترک را شروع کنید؟

در Exercism ثبت‌نام کنید تا Gleam را همراه با 33 مفهوم122 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.