สำหรับแต่ละ
ฟังก์ชัน for-each ใน Scheme ใช้เพื่อใช้ขั้นตอนกับแต่ละองค์ประกอบของรายการ (หรือหลายรายการ) ต่างจาก map ที่ส่งคืนรายการใหม่พร้อมผลลัพธ์ for-each ใช้สำหรับ ผลข้างเคียง เช่น การพิมพ์หรือการอัปเดตตัวแปร
รูปแบบที่ง่ายที่สุดของ for-each มีลักษณะดังนี้:
(for-each 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
มันทำงานอย่างไร
วนซ้ำแต่ละองค์ประกอบ:
- กระบวนการที่ให้มาจะถูกดำเนินการกับทุกองค์ประกอบในรายการตามลำดับ
ดำเนินการผลข้างเคียง:
- ผลข้างเคียงที่พบบ่อย ได้แก่ การพิมพ์ การบันทึก หรือการแก้ไขตัวแปรภายนอก ต่างจาก
mapfor-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 คุณจะสามารถประมวลผลรายการได้อย่างมีประสิทธิภาพเมื่อเป้าหมายคือการดำเนินการแทนที่จะแปลงข้อมูล