يشير التخطيط إلى تطبيق دالة على كل عنصر من عناصر متتالية لإنتاج متتالية جديدة.
يمكن القيام بذلك بسهولة على مصفوفة باستخدام الدالة 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"
لوسي، الكائن الفضائي من ليسب، تحب الأعداد، وتعتقد أن بعضها «رائع».
وتطلب منك مساعدتها في كتابة دوال تجعل الأعداد أكثر روعة.
قد يتغيّر ما تعتقده لوسي مما يجعل العدد رائعًا، لذا ستحتاج الدوال إلى أن تكون مرنة.
لتحويل مصفوفة من الأعداد إلى مصفوفة أعداد أكثر روعة، ستحتاج إلى كتابة دالة make-magnificent-maybe تأخذ دالة تُطبَّق على الأعداد ومصفوفة من الأعداد.
ينبغي أن تُقيّم إلى مصفوفة من الأعداد الأكثر روعة (وفقًا للدالة المقدَّمة).
(make-magnificent-maybe #'square '(1 2 3)) ; => (1 4 9)
(make-magnificent-maybe #'1+ '(1 2 3)) ; => (2 3 4)
بعد أن نجعل الأعداد أكثر روعة (كما نأمل)، تريد لوسي أن ترى فقط الأعداد الرائعة حقًا.
هي متأكدة تمامًا أن 1 ليس رائعًا أبدًا، لذا ما عليك سوى حذفه.
لكن بخلاف ذلك، تغيّر لوسي رأيها أحيانًا، لذا ستعطيك مرة أخرى دالة تخبرك ما إذا كان العدد رائعًا أم لا.
ستحتاج إلى كتابة دالة only-the-best تأخذ دالة ومصفوفة من الأعداد وتُرجع الأعداد الأفضل فقط (ليس 1، ولا الأعداد التي تُقيّمها الدالة إلى صحيح).
(only-the-best #'evenp '(1 2 3 4 5)) ; => (3 5)
(only-the-best #'oddp '(1 3 5)) ; => ()
سجّل في Exercism لتتعلّم وتتقن Common Lisp عبر 27 مفهومًا92 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.