Haskell:
การลบตัวอักษรที่ตรงกับรูปแบบ
วิธีการ:
import Data.List (isInfixOf)
import Data.Char (isSpace)
-- ฟังก์ชั่นง่ายๆในการลบพาเทิร์นออกจากสตริง
removePattern :: Eq a => [a] -> [a] -> [a]
removePattern [] _ = []
removePattern string@(x:xs) pattern
| pattern `isInfixOf` string = removePattern (drop (length pattern) string) pattern
| otherwise = x : removePattern xs pattern
-- ใช้ฟังก์ชั่นที่กำหนดไว้ล่วงหน้าเพื่อตัดช่องว่างออกจากสตริง
trim :: String -> String
trim = f . f
where f = reverse . dropWhile isSpace
main :: IO ()
main = do
let text = "Haskell is super cool, super cool indeed."
let cleanedText = removePattern text "super "
putStrLn cleanedText -- "Haskell is cool, cool indeed."
putStrLn $ trim " Trimmed whitespace " -- "Trimmed whitespace"
ลึกลงไป
Haskell มีชุดไลบรารีที่หลากหลาย เช่น ‘Data.List’, ให้เครื่องมือต่างๆ สำหรับการจัดการกับรายการ ซึ่งสตริงเป็นกรณีพิเศษของรายการ ในประวัติศาสตร์, การจับคู่พาเทิร์นของ Haskell เป็นแนวคิดที่ยืมมาจากภาษาฟังก์ชั่นเก่าๆ เช่น ML
มีวิธีการจับคู่พาเทิร์นที่แตกต่างกันใน Haskell ฟังก์ชั่น removePattern
ของเราง่ายๆ ใช้ isInfixOf
เพื่อตรวจสอบพาเทิร์น นอกจากนี้ยังมีไลบรารี regex สำหรับพาเทิร์นที่ซับซ้อน แต่พวกมันเพิ่มการพึ่งพาและบางครั้งทำให้สิ่งต่างๆ ซับซ้อนเกินไป
พูดถึงการพึ่งพา, สำหรับการตัดช่องว่าง, คุณอาจนำเข้าไลบรารีภายนอก แต่ฟังก์ชั่น ’trim’ ของเราทำงานได้โดยใช้เนทีฟ
สุดท้าย, ในแง่ของประสิทธิภาพ, ควรระมัดระวังกับฟังก์ชั่นเรียกตัวเองใน Haskell; มันสามารถไม่มีประสิทธิภาพได้หากไม่ได้รับการปรับให้เหมาะสมโดยคอมไพเลอร์ ธังก์สามารถสะสมกันได้ ทำให้เกิดการรั่วไหลของหน่วยความจำ สำหรับประสิทธิภาพที่ดีขึ้น คุณอาจสำรวจโมดูล Text
ของ Haskell สำหรับการจัดการสตริงขนาดใหญ่หรือจำนวนมาก
ดูเพิ่มเติม
- รีลเวิลด์แฮสเคลล์: http://book.realworldhaskell.org/
- เอกสารการใช้ Haskell
Data.List
: https://hackage.haskell.org/package/base-4.16.1.0/docs/Data-List.html - Haskell Wiki เกี่ยวกับประสิทธิภาพ: https://wiki.haskell.org/Performance