المسارات
/
Common Lisp
Common Lisp
/
التمارين
/
تقسيم Logan العددي
تقسيم Logan العددي

تقسيم Logan العددي

تمرين تعلّمي

مقدمة

الاختزال

الاختزال هو التطبيق المتكرر لدالة على كل عنصر من عناصر متتالية ما، مع تجميع النتائج بطريقة ما. الدالة المطبَّقة تأخذ معاملين: القيمة المجمَّعة الحالية، والعنصر المراد معالجته. ويجب أن تكون نتيجتها هي القيمة المجمَّعة الجديدة.

في Common Lisp تُنجَز هذه العملية بالدالة reduce. وفي أبسط صورها تبدو هكذا:

(reduce #'function-to-apply sequence :initial-value value)

لاحظ أن هناك قيمة ابتدائية مُعطاة، وهي "القيمة المجمَّعة الحالية" التي تُمرَّر إلى الدالة عند معالجة العنصر الأول.

إليك مثالًا يجمع أعداد المصفوفة معًا بدءًا من قيمة ابتدائية مقدارها 10:

(reduce #'+ '(1 2 3 4) :initial-value 10) ; => 20

لاحظ أنه إذا كانت المتتالية فارغة فلن تُستدعى الدالة أبدًا، وستكون نتيجة الصيغة هي القيمة الابتدائية.

التعليمات

لوجان، الكائن الفضائي الخاص بـ Lisp، يحب الأعداد ويحب أيضًا التنظيم.

يطلب منك مساعدته في كتابة دالة تأخذ مصفوفة أعداد وتنتج زوجًا من مصفوفتين: الأولى هي كل الأعداد الفردية، والثانية هي كل الأعداد الزوجية.

1. تصنيف عدد

أولًا، ستحتاج إلى إنشاء دالة تأخذ زوجًا من مصفوفتين وعددًا، وتضع ذلك العدد في المصفوفة الفرعية الصحيحة حسب ما إذا كان فرديًا أم زوجيًا:

(categorize-number '((1) . (2)) 23) ; => ((23 1) . (2))
(categorize-number '((1) . (2)) 42) ; => ((1) . (42 2))

2. تصنيف أعداد كثيرة

الآن، باستخدام الدالة التي أنشأتها للتو، يمكنك كتابة دالة أخرى تأخذ مصفوفة أعداد وتصنّفها كما فعلت أعلاه:

(partition-numbers '(1 2 3 4))     ; => ((3 1) . (4 2))
(partition-numbers '(42 31 24 13)) ; => ((13 31) . (24 42))
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Common Lisp Exercism

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

سجّل في Exercism لتتعلّم وتتقن Common Lisp عبر 27 مفهومًا92 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.