المسارات
/
Clojure
Clojure
/
التمارين
/
عمليات القوائم
عمليات القوائم

عمليات القوائم

متوسط

التعليمات

نفّذ عمليات المصفوفة الأساسية.

في اللغات الوظيفية، تُعدّ عمليات المصفوفات مثل length وmap وreduce شائعة جدًا. نفّذ سلسلة من عمليات المصفوفة الأساسية، دون استخدام دوال موجودة.

يعتمد العدد الدقيق للعمليات المطلوب تنفيذها وأسماؤها على المسار، لتجنّب التعارض مع الأسماء الموجودة، لكن العمليات العامة التي ستنفّذها تشمل:

  • append (بإعطاء مصفوفتين، أضِف كل عناصر المصفوفة الثانية إلى نهاية المصفوفة الأولى)؛
  • concatenate (بإعطاء سلسلة من المصفوفات، ادمج كل عناصر المصفوفات كلها في مصفوفة واحدة مسطّحة)؛
  • filter (بإعطاء دالة شرطية ومصفوفة، أرجِع المصفوفة التي تضم كل العناصر التي يكون عندها predicate(item) صحيحًا)؛
  • length (بإعطاء مصفوفة، أرجِع العدد الإجمالي للعناصر داخلها)؛
  • map (بإعطاء دالة ومصفوفة، أرجِع مصفوفة نتائج تطبيق function(item) على كل العناصر)؛
  • foldl (بإعطاء دالة ومصفوفة وقيمة مراكم ابتدائية، اطوِ (اختزل) كل عنصر في المراكم من اليسار)؛
  • foldr (بإعطاء دالة ومصفوفة وقيمة مراكم ابتدائية، اطوِ (اختزل) كل عنصر في المراكم من اليمين)؛
  • reverse (بإعطاء مصفوفة، أرجِع مصفوفة تضم كل العناصر الأصلية، لكن بترتيب معكوس).

لاحظ أن ترتيب تمرير الوسائط إلى دالتي الطيّ (foldl وfoldr) مهم.

الملحق

Note

التعليمات أعلاه متزامنة مع مستودع مشترك لضمان الاتساق بين جميع مسارات اللغات. يقدّم هذا الملحق توضيحًا إضافيًا أو يعدّل التعليمات حسب الحاجة لتتوافق على نحو أفضل مع أهداف مسار Clojure.

في هذا التمرين ضمن مسار Clojure، افترض أنَّ المدخل والمخرج كلاهما متجهات، كما تشير إليه الاختبارات. وكهدف إضافي، فكّر في كيفية تنفيذ أسلوب لا يستخدم المصفوفات في الخطوات الوسيطة.

من المهم ألّا تعيد استخدام دوال Clojure المدمجة التي تؤدي وظائف مشابهة، لأن ذلك سيقلّل من القيمة التعليمية المقصودة للتمرين. ومن الدوال الأساسية في فضاء الأسماء clojure.core التي ينبغي تجنّبها: into، وconcat، وcat، وlazy-cat، وmapcat، وflatten، وfilter، وfilterv، وremove، وcount، وmap، وmapv، وreduce، وtransduce، وreverse، وrseq.

أهداف اختيارية

الهدف الاختياري موجّه لمن يريد تحديًا إضافيًا، وقد صُمِّم على أساس أنك أكملت الهدف الرئيسي بالفعل.

حاول اجتياز الاختبارات بوضع أسلوب يفترض ما يلي:

  • أن يكون المدخل والمخرج كلاهما مصفوفات بدلًا من المتجهات. لاحظ أنه، كما هو معتاد، لا حاجة إلى تعديل الاختبارات.
  • أن المتجهات لا يمكن استخدامها في الخطوات الوسيطة.

إذا قررت نشر هذا، فاحرص على إضافة تعليق يوضّح أنه يعالج الهدف الاختياري الخاص باستخدام المصفوفات. ولا تنسَ تحديث سلاسل التوثيق!

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Clojure Exercism

مستعد لبدء عمليات القوائم؟

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

تعمّق في عمليات القوائم!

استمتع بمقدمة عملية إلى الاستدعاء الذاتي، واستكشف البدائل الأمرية والوظيفية لتمرين عمليات القوائم، وتعمّق في الاستدعاء الذاتي الذيلية ودوال المراكم.