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
كيف يعمل
التكرار على كل عنصر:
- يُنفَّذ الإجراء لكل عنصر في القائمة بالترتيب.
يؤدي إلى آثار جانبية:
- تشمل الآثار الجانبية الشائعة الطباعة أو التسجيل أو تعديل متغيرات خارجية. على عكس
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، يمكنك معالجة القوائم بفعالية عندما يكون الهدف تنفيذ إجراءات بدل تحويل البيانات.