Haskell:
חילוץ תת-מחרוזות
איך לעשות:
import Data.Text (Text)
import qualified Data.Text as T
-- חילוץ תת-מחרוזת ממיקום התחלתי עד סוף
substringFrom :: Int -> Text -> Text
substringFrom start text = T.drop start text
-- חילוץ תת-מחרוזת מהתחלה ועד מיקום סופי
substringTo :: Int -> Text -> Text
substringTo end text = T.take end text
-- חילוץ תת-מחרוזת בעזרת טווח
substring :: Int -> Int -> Text -> Text
substring start end text = T.take (end - start) (T.drop start text)
-- דוגמה לשימוש
main :: IO ()
main = do
let text = T.pack "שלום, עולם!"
putStrLn . T.unpack $ substringFrom 6 text -- "עולם!"
putStrLn . T.unpack $ substringTo 5 text -- "שלום"
putStrLn . T.unpack $ substring 7 12 text -- "עולם"
תוצאת הקוד: ביצוע פונקציות החילוץ על המחרוזת “שלום, עולם!” יחזיר “עולם!”, “שלום”, ו"עולם" בהתאמה.
צלילה עמוקה
Haskell משתמש בפונקציות חילוץ מחרוזות מהספריה Data.Text
כדי להימנע מעבודה עם מחרוזות מטיפוס String
, שהן פחות יעילות. ההיסטוריה של פונקציות החילוץ הופכת את עבודת הטקסט לפשוטה יותר ב-Haskell. ישנם גם שיטות אלטרנטיביות כמו פרסור (parsing) וביטויים רגולריים, אך לעיתים הפונקציות המובנות עושות את העבודה נאמנה ובמהירות. דבר נוסף שחשוב לדעת הוא שחילוץ תת-מחרוזות צריך להיעשות תוך כדי התחשבות במיקומים שמאחרי הגבולות שאתה מגדיר, כדי להימנע משגיאות זמן ריצה.
ראה גם
- ספריית המחרוזות
Data.Text
: http://hackage.haskell.org/package/text - מבוא לשפת Haskell (באנגלית): http://learnyouahaskell.com/chapters
- מדריך לביטויים רגולריים ב-Haskell: https://wiki.haskell.org/Regular_expressions