Я хотел бы разбить мою строку на неэкранированные пробелы, как это:
let s = "number\\ 1 number\\ 2 number\\ 3"
["number\\ 1", "number\\ 2", "number\\ 3"]
or even better
["number 1", "number 2", "number 3"]
Как мне это сделать?
Попытка 1:
let s = "number\\ 1 number\\ 2 number\\ 3"
splitWhitespace :: String -> [String]
splitWhitespcae s = splitOn " " s
-- returns ["number\\","1","number\\","2","number\\","3"]
concatBackslash :: [String] -> [String]
concatBackslash [] = []
concatBackslash (x : xx : xs) = case init x of
"\\" -> (x ++ xx) : concatBackslash xs
_ -> x : xx : concatBackslash x
Но по какой-то причине это возвращает тот же список.
Попытка 2:
splitOnWhitespace :: String -> [String]
splitOnWhitespace s = splitOn " " s
concatBackslash :: [String] -> [String]
concatBackslash [] = []
concatBackslash [x, xs] = case last x of
'\\' -> [(init x) ++ xs]
_ -> [x, xs]
concatBackslash (x : xx : xs) = case last x of
'\\' -> concatBackslash (((init x) ++ xx) : xs)
_ -> x: concatBackslash (xx : xs)
Это было сделано с помощью @leftaroundabout, однако я закончил без пробелов.
> let s = "number\\ 1 number\\ 2 number\\ 3"
> concatBackslash $ splitOnWhitespace s
["number1","number2","number3"]