สำหรับแต่ละ

ฟังก์ชัน 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


มันทำงานอย่างไร

  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 คุณจะสามารถประมวลผลรายการได้อย่างมีประสิทธิภาพเมื่อเป้าหมายคือการดำเนินการแทนที่จะแปลงข้อมูล