المسارات
/
Common Lisp
Common Lisp
/
التمارين
/
أداة التعيين الرائعة لدى Lucy
أداة التعيين الرائعة لدى Lucy

أداة التعيين الرائعة لدى Lucy

تمرين تعلّمي

مقدمة

التخطيط

يشير التخطيط إلى تطبيق دالة على كل عنصر من عناصر متتالية لإنتاج متتالية جديدة.

يمكن القيام بذلك بسهولة على مصفوفة باستخدام الدالة mapcar. لنفترض أن لدينا دالة double تضرب وسيطها في 2:

(mapcar #'double '(1 2 3 4)) ; => (2 4 6 8)

لاحظ أن الوسيط الأول هو دالة يجب استدعاؤها. و#' صيغة اقتباس خاصة لتحديد دالة.

استُدعيت double أولًا مع العنصر الأول، ثم مع العنصر الثاني، وهكذا. وجُمعت النتائج في مصفوفة، وهي القيمة التي يُقيَّم إليها التعبير.

التصفية

التصفية هي عملية إنشاء متتالية من متتالية أخرى عبر نسخ كل العناصر ما عدا عناصر معينة من المتتالية الأصلية. ويمكن اختيار العناصر التي ستُضمَّن في المتتالية الجديدة عبر دالة شرطية (أي دالة تُقيَّم إلى قيمة منطقية)، أو عبر المساواة مع كائن محدد.

الإزالة بواسطة دالة شرطية

remove-if دالة تأخذ دالة شرطية ومتتالية كوسائط، وتُرجع متتالية تحتوي فقط على العناصر التي قُيِّمت لها الدالة الشرطية إلى قيمة خطأ. بعبارة أخرى، هي "تزيل" كل عناصر المتتالية التي تُقيَّم لها الدالة الشرطية إلى قيمة صحيح. لكن لاحظ أن هذه الدالة لا تعدّل المتتالية الأصلية! بدلًا من ذلك، تُرجع متتالية جديدة بدون تلك العناصر. وإذا كانت الدالة الشرطية صحيحة لكل القيم، فستُرجع متتالية فارغة.

(remove-if #'evenp '(1 2 3 4 5)) ; => (1 3 5)
(remove-if #'oddp '(1 3 5))      ; => ()

إزالة عنصر معين

إذا أراد المرء إزالة عنصر معين من متتالية، فيمكنه استخدام remove، التي تأخذ العنصر المراد إزالته ومتتالية. فتُرجع كل القيم في المتتالية التي لا تساوي العنصر المراد إزالته. ملاحظة: تُفحص المساواة افتراضيًا باستخدام eql، وهي دالة المساواة العامة.

(remove 1 '(1 2 1 3 1 4)) ; => (2 3 4)
(remove #\l "hello")      ; => "heo"

التعليمات

لوسي، الكائن الفضائي من ليسب، تحب الأعداد، وتعتقد أن بعضها «رائع».

وتطلب منك مساعدتها في كتابة دوال تجعل الأعداد أكثر روعة.

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

1. اجعل الأعداد رائعة

لتحويل مصفوفة من الأعداد إلى مصفوفة أعداد أكثر روعة، ستحتاج إلى كتابة دالة make-magnificent-maybe تأخذ دالة تُطبَّق على الأعداد ومصفوفة من الأعداد. ينبغي أن تُقيّم إلى مصفوفة من الأعداد الأكثر روعة (وفقًا للدالة المقدَّمة).

(make-magnificent-maybe #'square '(1 2 3)) ; => (1 4 9)
(make-magnificent-maybe #'1+ '(1 2 3))     ; => (2 3 4)

2. الأفضل فقط

بعد أن نجعل الأعداد أكثر روعة (كما نأمل)، تريد لوسي أن ترى فقط الأعداد الرائعة حقًا.

هي متأكدة تمامًا أن 1 ليس رائعًا أبدًا، لذا ما عليك سوى حذفه.

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

ستحتاج إلى كتابة دالة only-the-best تأخذ دالة ومصفوفة من الأعداد وتُرجع الأعداد الأفضل فقط (ليس 1، ولا الأعداد التي تُقيّمها الدالة إلى صحيح).

(only-the-best #'evenp '(1 2 3 4 5)) ; => (3 5)
(only-the-best #'oddp '(1 3 5))    ; => ()
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Common Lisp Exercism

مستعد لبدء أداة التعيين الرائعة لدى Lucy؟

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