ค้นหาความยาวของสตริง

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

ดูเพิ่มเติม