List
ตั้งต้นมักไม่ค่อยมีประโยชน์ที่จะเอาไปใช้ต่อเท่าไหร่ จนกว่าเราจะเปลี่ยนค่าของสมาชิกบางตัวไปตามเราที่ต้องการเราสามารถสร้าง
List
ใหม่จากของเดิมได้ โดยคำนวณค่าสมาชิกเก่าทุกตัวภายใต้ฟังก์ชันเดียวกัน วิธีการนี้เรียกว่า list comprehension และสามารถทำได้ดังนี้นอกจากนี้ เรายังสามารถกรองสมาชิกตัวที่ไม่ต้องการทิ้งก่อนเอาไปคำนวณไปได้ เช่น
อย่างไรก็ตาม ถ้าต้องทำงานกับ
List
อนันต์ (อย่าง [1..]
) การกรองสมาชิกด้วยวิธีการข้างต้นนี้ไม่พอ ต้องใช้งานร่วมกับ take
, takeWhile
เช่นเดิมครับนอกจาก list comprehension ยังมีทางเลือกที่ช่วยให้ทำงานได้เช่นเดียวกันคือ
map
กับ filter
ครับข้อแตกต่างหลักๆ คือ list comprehension จะทำงานกับ
List
หลายๆ อัน (มองในรูป Cartesian product) ได้ง่ายกว่า แต่การใช้ฟังก์ชัน map
, filter
แยกกัน จะเป็นธรรมชาติกว่าเมื่อทำ filter
หลังจาก map
เช่นตัวอย่างเลื่องชื่อของ Haskell อย่าง quicksort ก็สามารถทำโดยใช้เทคนิค
filter
ร่วมกับการทำ pattern matching บน List
ดังนี้ครับ
No comments:
Post a Comment