Haskell:
ค้นหาความยาวของสตริง
วิธีการ:
-- การใช้ฟังก์ชั่น `length`
main = do
let myString = "Hello, Haskell!"
print $ length myString
ตัวอย่างผลลัพธ์:
15
ศึกษาลึก
Haskell เป็นภาษาที่มีลักษณะเป็น function ล้วน ที่สตริงถูกแสดงเป็นรายการของอักขระ ฟังก์ชั่น length
, ซึ่งเป็นส่วนหนึ่งของ Prelude (ไลบรารีเริ่มต้นที่ถูกนำเข้าไปในทุกโปรแกรม Haskell), ดำเนินการภายใต้การแสดงนี้
ในอดีต, สตริงเป็นรายการถูกเลือกโดยธรรมชาติสำหรับ Haskell เนื่องจากความเรียบง่ายและความจริงที่ว่าภาษา Lisp เลือกการออกแบบที่คล้ายกัน (และมีอิทธิพลต่อภาษาฟังก์ชั่นหลายๆ ภาษา) ฟังก์ชั่น length
นั้นเพียงแค่นับองค์ประกอบในรายการนี้
อย่างไรก็ตาม, length
เป็น O(n), หมายความว่าฟังก์ชั่นจะใช้เวลาที่สัมพันธ์กับความยาวของสตริง นี่ไม่ใช่ปัญหาสำหรับสตริงสั้นๆ แต่สำหรับสตริงยาวๆ, มันอาจไม่มีประสิทธิภาพ
ทางเลือกอื่น ๆ ได้แก่:
- การใช้
Text
จากแพ็คเกจtext
, โครงสร้างที่มีประสิทธิภาพสูงกว่าสำหรับข้อความ Unicode - การใช้
ByteString
จากแพ็คเกจbytestring
สำหรับข้อมูลไบนารีหรือ ASCII
ทั้งสองนำเสนอฟังก์ชั่น length
ที่ได้รับการปรับให้เหมาะสมกับโครงสร้างข้อมูลของตน
ในแง่ของการใช้งาน, ฟังก์ชั่นเบื้องต้นของ length
อาจมีลักษณะดังนี้:
myLength :: [a] -> Int
myLength [] = 0 -- ความยาวของรายการว่างคือ 0
myLength (_:xs) = 1 + myLength xs -- เพิ่ม 1 แบบเรียกกลับสำหรับส่วนที่เหลือของรายการ
สำหรับประเภทข้อมูล Text
และ ByteString
, พวกเขามีรายละเอียดการใช้งานภายในของตัวเองที่ทำให้มีประสิทธิภาพสูงกว่าการเชื่อมโยงรายการอักขระอย่างง่าย