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, พวกเขามีรายละเอียดการใช้งานภายในของตัวเองที่ทำให้มีประสิทธิภาพสูงกว่าการเชื่อมโยงรายการอักขระอย่างง่าย