المسارات
/
F#
F#
/
التمارين
/
Tracks on Tracks on Tracks
Tracks on Tracks on Tracks

Tracks on Tracks on Tracks

تمرين تعلّمي

مقدمة

المصفوفات

list في F# مجموعة غير قابلة للتغيير تتكوّن من صفر أو أكثر من القيم. ويجب أن تكون جميع القيم في المصفوفة من النوع نفسه. ولأن المصفوفات غير قابلة للتغيير، فبمجرد إنشاء المصفوفة لا يمكن أن تتغيّر قيمتها أبدًا. وأي دوال أو عوامل تبدو وكأنها تعدّل المصفوفة (مثل إضافة عنصر) ستُرجع في الواقع مصفوفة جديدة.

يمكن تعريف المصفوفات على النحو التالي:

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

الأسلوب الأكثر شيوعًا لإضافة عنصر إلى مصفوفة هو استخدام المعامل :: (cons):

let twoToFour = [2; 3; 4]
let oneToFour = 1 :: twoToFour
// => [1; 2; 3; 4]

تحتوي المصفوفة في F# على رأس (العنصر الأول) و_ذيل_ (كل ما يأتي بعد العنصر الأول). وذيل المصفوفة هو بذاته مصفوفة.

يتم التعامل مع المصفوفات إما عبر دوال وعوامل معرّفة في وحدة List، أو يدويًا باستخدام مطابقة الأنماط عبر نمطي list و_cons_:

let describe list =
    match list with
    | [] -> "Empty list"
    | head::tail -> sprintf "Non-empty list with head: %d" head

describe []        // => "Empty list"
describe [1]       // => "Non-empty with head: 1"
describe [5; 7; 9] // => "Non-empty with head: 5"

يمكنك أيضًا تجاهل قيمة عند مطابقة الأنماط؛ فعندما لا تهتم بقيمة ما في حالة معيّنة (أي أنك لن تستخدم القيمة) يمكنك استخدام شرطة سفلية ('_') للدلالة على ذلك:

let describe list =
    match list with
    | [] -> "Empty list"
    | [x] -> "List with one item"
    | [_; y] -> "List with two items (first item ignored)"
    | _ -> "List with many items (all items ignored)"

describe []        // => "Empty list"
describe [1]       // => "List with one item"
describe [5; 7]     // => "List with two items (first item ignored)"
describe [5; 7; 9] // => "List with many items (all items ignored)"

ينبغي أن تأتي '_' المفردة دائمًا أخيرًا عند مطابقة الأنماط، فكل قيمة لا تطابق أيًّا من الحالات الأخرى ستُعالَج بواسطة هذه الحالة.

التعليمات

في هذا التمرين ستكتب كودًا لتتبّع مصفوفة من لغات البرمجة التي تريد تعلّمها على Exercism.

لديك ست مهام، وكلها ستتضمن التعامل مع المصفوفات.

1. إنشاء مصفوفة جديدة

لتتبّع اللغات التي تريد تعلّمها، ستحتاج إلى إنشاء مصفوفة جديدة. عرّف الارتباط newList الذي يحتوي على مصفوفة جديدة فارغة.

newList
// => []

2. تعريف مصفوفة موجودة

حاليًا، لديك ورقة مكتوب عليها اللغات التي تريد تعلّمها: F# وClojure وHaskell. عرّف الارتباط existingList ليمثّل هذه المصفوفة.

existingList
// => ["F#"; "Clojure"; "Haskell"]

3. إضافة لغة جديدة إلى مصفوفة

بينما تستكشف Exercism وتجد لغات أكثر إثارة للاهتمام، تريد إضافتها إلى مصفوفتك. نفّذ الدالة addLanguage لإضافة لغة جديدة إلى بداية مصفوفتك.

addLanguage "TypeScript" ["JavaScript"; "CoffeeScript"]
// => ["TypeScript"; "JavaScript"; "CoffeeScript"]

4. عدّ اللغات في المصفوفة

عدّ اللغات واحدة واحدة غير مريح. نفّذ الدالة countLanguages لعدّ عدد اللغات في مصفوفتك.

countLanguages ["C#"; "Racket"; "Rust"; "Ruby"]
// => 4

5. عكس المصفوفة

في مرحلة ما، تدرك أن مصفوفتك مرتّبة بالعكس في الواقع! نفّذ الدالة reverseList لعكس مصفوفتك.

reverseList ["Prolog"; "C"; "Idris"; "Assembly"]
// => ["Assembly"; "Idris"; "C"; "Prolog"]

6. التحقق مما إذا كانت المصفوفة مثيرة

مع أنك تحب جميع اللغات، فإن F# له مكانة خاصة في قلبك. لذلك، تتحمس كثيرًا لمصفوفة من اللغات إذا:

  • كان العنصر الأول في المصفوفة هو F#.
  • كان العنصر الثاني في المصفوفة هو F#، وتحتوي المصفوفة على لغتين أو ثلاث لغات.

نفّذ الدالة excitingList للتحقق مما إذا كانت مصفوفة من اللغات مثيرة:

excitingList ["Nim"; "F#"]
// => true
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
F# Exercism

مستعد لبدء Tracks on Tracks on Tracks؟

سجّل في Exercism لتتعلّم وتتقن F# عبر 18 مفهومًا148 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.