แก้ไขแล้ว: ฟังก์ชั่นที่ไม่ระบุชื่อ

การปรับปรุงครั้งล่าสุด: 09/11/2023

ฟังก์ชันนิรนามหรือที่รู้จักกันทั่วไปในชื่อฟังก์ชันแลมบ์ดา เป็นส่วนสำคัญของภาษาการเขียนโปรแกรมเชิงฟังก์ชัน เช่นฮัสเคลล์แตกต่างจากฟังก์ชันทั่วไป ฟังก์ชันนิรนามไม่มีชื่อ มันถูกสร้างขึ้นมาแบบทันทีทันใด และโดยทั่วไปจะใช้เมื่อต้องการใช้ฟังก์ชันเพียงครั้งเดียว เรามาลองศึกษาตัวอย่างปัญหาที่สามารถแก้ไขได้อย่างมีประสิทธิภาพโดยใช้ฟังก์ชันนิรนามกัน

ปัญหา

ลองจินตนาการว่าคุณกำลังพยายามวิเคราะห์รายการคำ และคุณจำเป็นต้องจัดการข้อมูลทางสถิติ คุณต้องการนับจำนวนครั้งของความยาวคำแต่ละคำในรายการ เพื่อให้โค้ดของคุณกระชับและดูแลรักษาได้ง่ายขึ้น คุณจึงตัดสินใจใช้ฟังก์ชันที่ไม่เปิดเผยตัวตน

โซลูชันที่มีฟังก์ชันนิรนาม

[รหัสเทียม lang=”Haskell”]
นำเข้าข้อมูลรายการ
นำเข้า Data.Map ที่ผ่านการรับรองเป็น Map

wordLengthCount :: [สตริง] -> Map.Map Int Int
wordLengthCount = Map.fromListWith (+) แผนที่ (x -> (ความยาว x, 1))
[/รหัสเทียม]

มาแกะโซลูชันทีละขั้นตอนกัน

คำอธิบายโดยละเอียดของหลักจรรยาบรรณ

ในบรรทัดแรก เรากำลังนำเข้าไลบรารีที่จำเป็น 'Data.List' มีฟังก์ชันการจัดการรายการ ในขณะที่ 'Data.Map' ช่วยให้เราเข้าถึงประเภทข้อมูลที่สามารถใช้เพื่อนำโครงสร้างข้อมูลแผนที่ไปใช้

ฟังก์ชัน 'wordLengthCount' รับรายการคำ (สตริง) เป็นอาร์กิวเมนต์ และส่งกลับแผนที่ที่มีการนับจำนวนครั้งของความยาวของคำแต่ละคำ

ขั้นแรก เรากำลังใช้ฟังก์ชันแผนที่เพื่อใช้ฟังก์ชันที่ไม่ระบุชื่อกับแต่ละคำในรายการ ฟังก์ชันนิรนามหรือฟังก์ชันแลมบ์ดาของเราถูกกำหนดเป็น:

[รหัสเทียม lang=”Haskell”]
x -> (ความยาว x, 1)
[/รหัสเทียม]

ฟังก์ชัน lambda รับคำเป็นอินพุต ('x') และส่งเอาต์พุตเป็นทูเพิล ซึ่งเป็นความยาวของคำและ 1 หลังจากดำเนินการนี้กับแต่ละคำในรายการ เราก็จะได้รายการสิ่งอันดับ

ต่อไป เราใช้ฟังก์ชัน 'Map.fromListWith' ฟังก์ชัน 'fromListWith' เป็นฟังก์ชันที่มีประโยชน์ซึ่งรับฟังก์ชันไบนารี่และรายการสิ่งอันดับและสร้างแผนที่

ฟังก์ชันไบนารี่คือ (+) ซึ่งจะบวกองค์ประกอบที่สองของทูเพิลหากองค์ประกอบแรกตรงกัน ดังนั้น ฟังก์ชันจะนำรายการสิ่งอันดับของเรา จัดกลุ่มตามความยาวของคำ และเพิ่มองค์ประกอบที่สองของสิ่งอันดับ โดยพื้นฐานแล้วจะนับจำนวนครั้งของความยาวคำแต่ละคำ

ไลบรารีและฟังก์ชันของ Haskell

ในโค้ดนี้ เราใช้ไลบรารีและฟังก์ชันของ Haskell ค่อนข้างมาก ไลบรารี 'Data.List'และ'Data.Map'มีความสำคัญอย่างยิ่งสำหรับการจัดการและจัดโครงสร้างข้อมูลใน Haskell ฟังก์ชัน 'map'มีบทบาทสำคัญในการใช้ฟังก์ชันนิรนามของเรากับแต่ละรายการในลิสต์ ซึ่งช่วยลดความซับซ้อนของโค้ดได้อย่างมาก

นอกจากนี้ ฟังก์ชัน 'fromListWith'จาก 'Data.Map' ยังช่วยให้เราจัดกลุ่มข้อมูลตามความยาวของคำและคำนวณจำนวนครั้งทั้งหมดได้อย่างมีประสิทธิภาพ

พลังของ Haskell ส่องสว่างอย่างแท้จริงเมื่อเรานำแนวคิดทั้งหมดเหล่านี้มารวมกัน ซึ่งแสดงให้เห็นถึงประสิทธิภาพและการแสดงออกของภาษาโปรแกรมเชิงฟังก์ชัน

ในแง่ของแฟชั่น ความสง่างามและความเรียบง่ายของโค้ดที่ไม่ระบุตัวตนที่ขับเคลื่อนด้วยฟังก์ชันนี้สามารถเปรียบได้กับเทรนด์แฟชั่นแบบมินิมอล ซึ่งน้อยมาก และแต่ละชิ้น (หรือฟังก์ชัน) จะต้องมีจุดประสงค์ที่ชัดเจนและกระชับ เช่นเดียวกับเส้นสายที่สะอาดตาและความสวยงามที่ไม่เกะกะในรูปแบบมินิมอลลิสต์ ฟังก์ชันที่ไม่ระบุชื่อใน Haskell นำเสนอโค้ดที่กระชับและสะอาดตาซึ่งทำงานด้วยประสิทธิภาพและความสง่างามที่ไม่มีใครเทียบได้

กระทู้ที่เกี่ยวข้อง: