for-each

تُستخدم for-each في Scheme لتطبيق إجراء على كل عنصر في قائمة (أو قوائم متعددة). على عكس map الذي يُرجع قائمة جديدة بالنتائج، تُستخدم for-each لتأثيراتها الجانبية، مثل طباعة المتغيرات أو تحديثها.

أبسط شكل لـ for-each:

(for-each procedure list)
  • procedure: دالة تُطبَّق على كل عنصر في القائمة.
  • list: القائمة التي تُعالَج عناصرها.

مثال: طباعة قائمة

(define (print-item x)
  (lumi-message (number->string x)))

(for-each print-item (list 1 2 3 4))
  • هنا، تُطبَّق print-item على كل عنصر في (1 2 3 4).
  • يطبع هذا كل رقم بالتسلسل.

الإخراج: 1 2 3 4


كيف يعمل

  1. التكرار على كل عنصر:

    • يُنفَّذ الإجراء لكل عنصر في القائمة بالترتيب.
  2. يؤدي إلى آثار جانبية:

    • تشمل الآثار الجانبية الشائعة الطباعة أو التسجيل أو تعديل متغيرات خارجية. على عكس map، for-each لا يُرجع قائمة جديدة.

مثال: الاستخدام مع قوائم متعددة

إذا وُفّرت قوائم متعددة، يعالج for-each العناصر المقابلة من كل قائمة.

(define (sum-and-print x y)
  (lumi-message (number->string (+ x y))))

(for-each sum-and-print (list 1 2 3) (list 4 5 6))
  • sum-and-print تجمع العناصر المقابلة من القائمتين وتطبع النتائج.

الإخراج: 5 7 9


ملخص

  • for-each مفيدة لإجراء تأثيرات جانبية على كل عنصر في قائمة.
  • على عكس map، for-each لا تُنتج قائمة جديدة — تركز فقط على الآثار الجانبية للإجراء.
  • يمكنها التعامل مع قوائم متعددة في وقت واحد، بتطبيق الإجراء على العناصر المقابلة.

باستخدام for-each، يمكنك معالجة القوائم بفعالية عندما يكون الهدف تنفيذ إجراءات بدل تحويل البيانات.