June 2018 Update
This commit is contained in:
parent
ba8067c3b7
commit
22f33d4004
5278 changed files with 84726 additions and 14379 deletions
28
Task/Multisplit/Haskell/multisplit-1.hs
Normal file
28
Task/Multisplit/Haskell/multisplit-1.hs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
import Data.List
|
||||
(isPrefixOf, stripPrefix, genericLength, intercalate)
|
||||
|
||||
trysplit :: String -> [String] -> Maybe (String, String)
|
||||
trysplit s delims =
|
||||
case filter (`isPrefixOf` s) delims of
|
||||
[] -> Nothing
|
||||
(d:_) -> Just (d, (\(Just x) -> x) $ stripPrefix d s)
|
||||
|
||||
multisplit :: String -> [String] -> [(String, String, Int)]
|
||||
multisplit list delims =
|
||||
let ms [] acc pos = [(acc, [], pos)]
|
||||
ms l@(s:sx) acc pos =
|
||||
case trysplit l delims of
|
||||
Nothing -> ms sx (s : acc) (pos + 1)
|
||||
Just (d, sxx) -> (acc, d, pos) : ms sxx [] (pos + genericLength d)
|
||||
in ms list [] 0
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
let parsed = multisplit "a!===b=!=c" ["==", "!=", "="]
|
||||
mapM_
|
||||
putStrLn
|
||||
[ "split string:"
|
||||
, intercalate "," $ map (\(a, _, _) -> a) parsed
|
||||
, "with [(string, delimiter, offset)]:"
|
||||
, show parsed
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue