1

我是函数式编程和 Clean 的新手。我想在空格上拆分一个字符串,就像wordsHaskell 中的函数一样。

words :: String -> [String]
input: "my separated list " 
output: ["my","separated","list"]

这是 Haskell 中的定义:

words :: String -> [String]
words s =  case dropWhile {-partain:Char.-}isSpace s of
             "" -> []
             s' -> w : words s''
                where (w, s'') =
                    break {-partain:Char.-}isSpace s'

但是 Clean 没有break,我不知道它是什么意思,以及如何在 Clean 中实现它:

s' -> w : words s''
where (w, s'')
4

1 回答 1

1

正如StdEnvApi 文档建议的那样,您应该将字符串转换为列表以使用 StdList API 函数(第 6 节,第 20 页)。这会导致这样的结果:

splitString :: String -> [String]
splitString x = [foldr (+++) "" i\\i<- splitString` (fromString x)]
    where
        splitString` :: [String] -> [[String]]
        splitString` x = let (p, n) = span ((<>) " ") x in
            if (isEmpty n) [p] [p:splitString` (tl n)]
于 2015-10-19T12:06:40.037 回答